【问题标题】:How to simulate Jumping in Pygame for this particular code如何为此特定代码在 Pygame 中模拟跳跃 [重复]
【发布时间】:2019-07-02 21:27:51
【问题描述】:

我一直在尝试模拟 Pygame 代码中的跳转,但未能成功实现。有一个尺寸为 10 x 10 的矩形,我希望该矩形在按下 SPACE 时跳转。我暂时保持这段代码不受重力影响。

import pygame
pygame.init()
ScreenLenX = 1000
ScreenLenY = 500
win = pygame.display.set_mode((ScreenLenX, ScreenLenY))
pygame.display.set_caption("aman")
run = True
Xcord = 100
Ycord = 100
length = 10
height = 10
vel = 2
xmove = 1
ymove = 1
while run:
  #pygame.time.delay(1)
    for event in pygame.event.get():
        print(event)
        if event.type ==pygame.QUIT:

            run = False

    if keys[pygame.K_RIGHT] and Xcord <= ScreenLenX-length:
        Xcord += vel
    if keys[pygame.K_LEFT] and Xcord >= 0:
        Xcord -= vel

     if keys[pygame.K_UP] and Ycord >= 0:
            Ycord -= vel
     if keys[pygame.K_DOWN] and Ycord <= ScreenLenY - height:
            Ycord += vel
     win.fill((0, 0, 0))
    pygame.draw.rect(win, (255, 0, 0), (Xcord, Ycord, length, height))
    keys = pygame.key.get_pressed()


    pygame.display.update()
pygame.quit()

【问题讨论】:

    标签: python pygame pycharm 2d-games


    【解决方案1】:

    在主循环之前添加一个变量jump并将其初始化为0:

    jump = 0  
    while run:
        # [...]
    

    如果允许玩家跳跃并停留在地面上,则仅对pygame.K_SPACE 做出反应。如果满足,则将jump 设置为所需的“跳跃”高度:

    if keys[pygame.K_SPACE] and Ycord == ScreenLenY - height:
        jump = 300
    

    只要jump 大于0,在主循环中向上移动玩家并减少jump 相同的数量。
    如果玩家没有跳到天亮,直到他落地:

     if jump > 0:
        Ycord -= vel
        jump -= vel
    elif Ycord < ScreenLenY - height:
        Ycord += 1
    

    查看演示,我将建议应用于您的代码:

    import pygame
    pygame.init()
    
    ScreenLenX, ScreenLenY = (1000, 500)
    win = pygame.display.set_mode((ScreenLenX, ScreenLenY))
    pygame.display.set_caption("aman")
    Xcord, Ycord = (100, 100)
    length, height = (10, 10)
    xmove, ymove = (1, 1)
    vel = 2
    jump = 0
    
    run = True
    clock = pygame.time.Clock()
    while run:
        #clock.tick(60)
        for event in pygame.event.get():
            print(event)
            if event.type ==pygame.QUIT:
                run = False
    
        keys = pygame.key.get_pressed()
        if keys[pygame.K_RIGHT] and Xcord <= ScreenLenX-length:
            Xcord += vel
        if keys[pygame.K_LEFT] and Xcord >= 0:
            Xcord -= vel
    
        if keys[pygame.K_SPACE] and Ycord == ScreenLenY - height:
            jump = 300
    
        if jump > 0:
            Ycord -= vel
            jump -= vel
        elif Ycord < ScreenLenY - height:
            Ycord += 1
    
        win.fill((0, 0, 0))
        pygame.draw.rect(win, (255, 0, 0), (Xcord, Ycord, length, height))
    
        pygame.display.update()
    

    【讨论】:

      猜你喜欢
      • 2021-04-08
      • 2021-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多