2017-07-31 65 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(上,下,右,左)...'的一部分。 –