2016-02-05 82 views
1

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

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

只是分割你的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来完全消除x_change变量。

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

+0

感谢您的建议!我试过了,它可以防止精灵移动过游戏边界,这是唯一的问题,但是一旦精灵到达边界,它就不能再移回去,所以例如如果我将它移动到左边框,我可以然后使用右箭头键返回。你知道这可能是为什么吗? – BluTac

+0

@HarryGray啊,是的,这是因为我的代码在精灵到达边界时会阻止所有移动,让我修复它,以防止移动到边界。 – River

+0

我添加了更改,它的工作原理是让精灵不能越过边界,但仍然可以朝相反的方向前进。唯一的问题是,现在你必须捣碎箭头键来移动精灵,你不能把它们压住,你会介意建议克服这个问题吗?感谢你目前的帮助! – BluTac