2016-11-19 49 views
-1

我正在製作雙人遊戲,其中兩名玩家可以同時移動。Pygame - 多人遊戲控制功能中的未知錯誤

while循環是這樣的:

while stop==0: 

for event in pygame.event.get(): 
    if event.type == pygame.QUIT: 
     stop = 1 

     #For player 1 
    #on pressing an arrow key 
    # xv, yv = velocity at which the object moves 
    elif event.type == pygame.KEYDOWN: 

     if event.key == pygame.K_LEFT: 
      xv = -1 
     elif event.key == pygame.K_RIGHT: 
      xv = 1 
     elif event.key == pygame.K_UP: 
      yv = -1 
     elif event.key == pygame.K_DOWN: 
      yv = 1 
      #   on releasing an arrow key 
    elif event.type == pygame.KEYUP: 

     if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT: 
      xv = 0 
     elif event.key == pygame.K_UP or event.key == pygame.K_DOWN: 
      yv = 0 

    #For player 2 

    elif event.type == pygame.KEYDOWN: 

     if event.key == pygame.K_a: 
      xv2 = -1 
     elif event.key == pygame.K_d: 
      xv2 = 1 
     elif event.key == pygame.K_w: 
      yv2 = -1 
     elif event.key == pygame.K_s: 
      yv2 = 1 
       #   on releasing an arrow key 
    elif event.type == pygame.KEYUP: 

     if event.key == pygame.K_a or event.key == pygame.K_d: 
      xv2 = 0 
     elif event.key == pygame.K_w or event.key == pygame.K_s: 
      yv2 = 0 

使用上面的代碼中,只有玩家1能夠移動,而玩家2保持不動。

但修改這樣它的工作代碼後,

while stop==0: 

for event in pygame.event.get(): 
    if event.type == pygame.QUIT: 
     stop = 1 

     #For player 1 
    #on pressing an arrow key 
    # xv, yv = velocity at which the object moves 
    elif event.type == pygame.KEYDOWN: 

     if event.key == pygame.K_LEFT: 
      xv = -1 
     elif event.key == pygame.K_RIGHT: 
      xv = 1 
     elif event.key == pygame.K_UP: 
      yv = -1 
     elif event.key == pygame.K_DOWN: 
      yv = 1 
      #   on releasing an arrow key 
    elif event.type == pygame.KEYUP: 

     if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT: 
      xv = 0 
     elif event.key == pygame.K_UP or event.key == pygame.K_DOWN: 
      yv = 0 

    #For player 2 
    if event.type == pygame.QUIT: 
     stop = 1 
    elif event.type == pygame.KEYDOWN: 

     if event.key == pygame.K_a: 
      xv2 = -1 
     elif event.key == pygame.K_d: 
      xv2 = 1 
     elif event.key == pygame.K_w: 
      yv2 = -1 
     elif event.key == pygame.K_s: 
      yv2 = 1 
       #   on releasing an arrow key 
    elif event.type == pygame.KEYUP: 

     if event.key == pygame.K_a or event.key == pygame.K_d: 
      xv2 = 0 
     elif event.key == pygame.K_w or event.key == pygame.K_s: 
      yv2 = 0 

唯一的變化作出了將

 if event.type == pygame.QUIT: 
     stop = 1 

的球員2. elif的語句之前,任何人都可以有這樣的困惑幫助嗎?

+0

它只是在你的第一個版本,你有兩個'elif的事件.type == pygame.KEYDOWN:'在相同的情況下'if ... elif ... elif ...'鏈。所以第二個從來沒有發生過。在第二個版本中,通過插入附加的「if」將elif鏈分成兩部分。 – mkiever

回答

0

你有

if event.type == pygame.QUIT: 
elif event.type == pygame.KEYDOWN: 
    # player1 
elif event.type == pygame.KEYUP: 
elif event.type == pygame.KEYDOWN: # <-- this will never checked 
    # player2 

pygame.KEYDOWN將永遠不會使用,因爲第一pygame.KEYDOWN抓所有KEYDOWN事件。

你只需要一個pygame.KEYDOWN

if event.type == pygame.QUIT: 
elif event.type == pygame.KEYDOWN: 
    # player1 
    # player2 
elif event.type == pygame.KEYUP: 
    # player1 
    # player2 

,或者你必須使用兩個if

if event.type == pygame.QUIT: 
elif event.type == pygame.KEYDOWN: 
    # player1 
elif event.type == pygame.KEYUP: 
    # player1 


if event.type == pygame.KEYDOWN: 
    # player2 
elif event.type == pygame.KEYUP: 
    # player2 

BTW。當你將使用類,那麼你將有自己的方法兩個對象,檢查事件

if event.type == pygame.QUIT: 
    # quit 

player1.handle_event(event) 
player2.handle_event(event) 

,每個球員都會有自己的

def handle_event(self, event) 
    if event.type == pygame.KEYDOWN: 
     # do something 
    elif event.type == pygame.KEYUP: 
     # do something