Window 边界在 pygame

Window boundaries in pygame

基本上我正在尝试为我正在制作的小游戏添加一些边界,我有一个只能从左向右移动的精灵,我试图阻止它离开游戏 window,如果精灵到达边缘,他们就不能再往前走,然后可以朝相反的方向走。 我当前的代码:

tankSprite = pygame.image.load('Sprites/Tank.png') #fixed apostrophe
tankSprite_width = 28


def tank(x,y):
    gameWindow.blit(tankSprite, (x,y))


def game_loop():
    x = (display_width * 0.45)
    y = (display_height * 0.8)
    x_change = 0

    gameExit = False
    gameMove = True

    while not gameExit and gameMove == True:

        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                 gameExit = False

            if event.type ==pygame.KEYDOWN:
               if event.key == pygame.K_LEFT:
                   x_change = -5
               if event.key == pygame.K_RIGHT:
                   x_change = 5
           if event.type == pygame.KEYUP:
               if event.key == pygame.K_LEFTor event.key == pygame.K_RIGHT:
                      x_change = 0
       x += x_change

       gameWindow.fill(white)
       tank(x,y)

       if x > display_width - tankSprite_width or x < 0:
            gameMove = False
       elif x < display_width - tankSprite_width or x > 0:
                gameMove = True

       pygame.display.update()
       clock.tick(60)


game_loop()
pygame.quit()
quit()

我当前的代码部分有效,当精灵到达边缘时,解决方案会自行关闭而不是让我返回。如果我删除:

pygame.quit()
quit()

然后精灵就停止了,我无法将它移回原位。在我前一段时间做的一个项目中,我使用了类似的东西:

if event.key == pygame.K_LEFT and sprite.x < 590:
        sprite.x += 5

根据我的记忆,上面的代码运行良好,但我现在似乎无法为我的项目弄清楚,有人可以帮我吗? 我想让精灵不能越过屏幕边界,当玩家到达边界时,他们要么留下来,要么朝相反的方向返回。谢谢

p.s。抱歉格式不正确

只需拆分您的 if 语句并分别检查每个方向的条件:

tankSprite = pygame.image.load('Sprites/Tank.png')
tankSprite_width = 28


def tank(x,y):
    gameWindow.blit(tankSprite, (x,y))


def game_loop():
    x = (display_width * 0.45)
    y = (display_height * 0.8)
    x_change = 0

    gameExit = False
    gameMove = True

    while not gameExit and gameMove == True:

        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                 gameExit = False

            if event.type ==pygame.KEYDOWN:
               if event.key == pygame.K_LEFT:
                   x_change = -5
               if event.key == pygame.K_RIGHT:
                   x_change = 5
           if event.type == pygame.KEYUP:
               if event.key == pygame.K_LEFTor event.key == pygame.K_RIGHT:
                      x_change = 0
        #valid move, add x_change
        if((x+x_change)> 0 and (x+x_change)<(display_width - tankSprite_width):
            x += x_change

        gameWindow.fill(white)
        tank(x,y)

#deleted stuff here

        pygame.display.update()
        clock.tick(60)


game_loop()
pygame.quit()
quit()

使用此方法,您甚至不需要再使用 gameMove 变量。

您也可以完全删除 x_change 变量,只需将更改直接应用到 x 即可。

此外,我认为您可能在 if 语句 if event.type == pygame.QUIT: 下指的是 gameExit = True,因为触发事件 pygame.QUIT 时退出是有意义的。