首页 > 解决方案 > 有没有办法将 pygame.display.update 添加到缩进循环

问题描述

我正在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 而不是平滑过渡

标签: pythonpygame

解决方案


不要使用嵌套循环来实现游戏过程。你有一个游戏循环,使用它。您所需要的只是主游戏循环和事件循环。当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()

推荐阅读