2016-11-19 17 views
-1

私は2人のプレーヤーが同時に動くことができる2人のゲームを作っています。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 

作られた唯一の変化は、プレイヤー2のelifのステートメントの前に

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

を挿入した誰もが、この混乱を助けることはできますか?

+0

を持っていますそれはあなたの最初のバージョンで使用すると、2つの 'のelifイベントを持っているだけのことです.type == pygame.KEYDOWN: 'if ... elif ... elif ...'チェーン内のケース。したがって、2番目のものは決して発生しませんでした。 2番目のバージョンでは、 'if'を挿入して' elif'チェーンを2つに分割します。 – 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 catchsすべてKEYDOWNイベントので、第二pygame.KEYDOWNは使用しないことになるがあります。

は1つだけですpygame.KEYDOWN

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

か、BTW 2 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 

を使用する必要がありますする必要があります。あなたがクラスを使用するとき、あなたはイベント

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

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

をチェックするために独自のメソッドを持つ2つのオブジェクトを持つことになりますと、すべてのプレイヤーが自分の

def handle_event(self, event) 
    if event.type == pygame.KEYDOWN: 
     # do something 
    elif event.type == pygame.KEYUP: 
     # do something 
関連する問題