pygame中的窗口边界

时间:2016-02-05 19:00:59

标签: python pygame boundary

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

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。抱歉狡猾的格式

1 个答案:

答案 0 :(得分:1)

只需拆分你的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语句gameExit = True下有if event.type == pygame.QUIT:,因为在触发事件pygame.QUIT时退出是有意义的。