2017-07-31 73 views
2

由于某种原因,当我按下箭头键时,我的Player雪碧不动。 它之前在移动,但现在它根本不移动,我没有看到我使用的代码有 的任何问题(再加上没有引发任何异常)。下面是相关代码 (告诉我,如果我需要添加更多):pygame:神秘的雪碧运动缺乏

def move(self,up,down,right,left): #move function in Player class 
    if up and self.rect.y>0: 
     print'up' 
     self.rect.y-=self.speed 
    if down and self.rect.y<650: 
     print'down' 
     self.rect.y+=self.speed 
    if right and self.rect.x<650: 
     print'right' 
     self.rect.x+=self.speed 
    if left and self.rect.x>0: 
     print'left' 
     self.rect.x-=self.speed 

... 

#in while loop, under "for event in pygame.event.get():" 
elif event.type == 2: #pygame.KEYDOWN 
    if event.key in range(273,277): #if the key is an arrow key 
     if event.key==273: #up 
      up=True 
     elif event.key==274: #down 
      down=True 
     elif event.key==275: #left 
      right=True 
     else:    #right 
      left=True 

既不以下回答我的问题: This,this

我在Windows 10,蟒蛇2.7。

+0

请提供一个我们可以复制并运行的[最小,完整且可验证的示例](https://stackoverflow.com/help/mcve),否则我们无法准确告诉您您做错了什么以及错误修复这个错误。 – skrx

回答

0

让我们来看看嵌套在while循环中的for循环中的代码块。
While循环是无限的,或者说,当它不需要时,它会停止吗?
另外,您是否在if语句后直接调用move函数,并且在您这样做之后,您是否在重置指令的变量?
像这样:

#in while loop, under "for event in pygame.event.get():" 
elif event.type == 2: #pygame.KEYDOWN 
    if event.key in range(273,277): #if the key is an arrow key 
     if event.key==273: #up 
      up=True 
     elif event.key==274: #down 
      down=True 
     elif event.key==275: #left 
      right=True 
     else:    #right 
      left=True 
    move(up,down,left,right) 
    up,down,right,left=False,False,False,False 

希望这可以帮助你跟踪你的错误。

+0

但是当再次点击一个键时,精灵仍然应该移动,因为至少其中一个变量在重新分配之前仍然是“真” –

+0

无论如何,重新分配应该只发生在'event.type = pygame.KEYUP' –

+0

'当我点击窗口角落的红色X时,“循环”终止。我使用'pygame.KEYUP'事件重置变量的方向,'move'函数是我的绘图代码之前的'Player()。update(上,下,右,左)...'的一部分。 –