有没有办法将pygame.display.update添加到缩进循环

时间:2019-09-16 20:45:53

标签: python pygame

我正在pygame上开发一个简单的游戏,我正在使用此代码实现跳转,但更新功能在for循环内不起作用,有解决此问题的方法:

while Running:
    if keys[pygame.K_UP]:
        if Y > 0:
            if Jump == False:
                for i in range(1,100):
                    pygame.time.delay(10)
                    pygame.display.update()
                    Y -= 10
                    Jump = True


    if not keys[pygame.K_UP]:
        if Y < 500-Height:
            Y+= Vel
    win.fill((0,0,0))
    pygame.draw.rect(win, (255, 0, 0), (X, Y, Width, Height))
    pygame.display.update()

跳转确实有效,但动画并不仅限于平滑过渡,还只是切成i = 100

1 个答案:

答案 0 :(得分:3)

不要使用嵌套循环来实现游戏过程。您有一个游戏循环,请使用它。您需要的只是主游戏循环和事件循环。按下 UP 时,请设置状态Jump。跳转结束后重置状态。根据每一帧中的状态Jump计算播放器的位置。例如:

jump_i = 0
while Running:

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            Running = False
    keys = pygame.key.get_pressed()

    if keys[pygame.K_UP]:
        if Y > 0 and Jump == False:
            Jump = True
            jump_i = 0

    if Jump and jump_i < 100:
        jump_i += 1
        Y -= 10
    else:
        Jump = False

        if Y < 500-Height:
            Y += Vel

    win.fill((0,0,0))
    pygame.draw.rect(win, (255, 0, 0), (X, Y, Width, Height))
    pygame.display.update()