2016-04-27 118 views
1

もう一度スタックされ、オンラインで有効な解決策が見つかりません。私はpygameとそのキー入力を使ってさまざまなことをコントロールしようとしています。今私は複数のキーを同時に使用する必要があります。次のように私のコードは次のとおりです。pygame連続キー入力と同時キー入力

pygame.key.set_reapeat(50,50) 
bProgramLoop = True 
while (bProgramLoop == True): 

    for event in pygame.event.get(): 
     if (event.type == pygame.QUIT): 
      bProgramLoop = False 
     if (pygame.key.get_pressed()[pygame.K_LEFT]): 
      EXECUTE_FUNCTION1() 
      print "left" 
     if (pygame.key.get_pressed()[pygame.K_RIGHT]): 
      EXECUTE_FUNCTION2() 
      print "right" 

を今私が持っている問題は、次のとおりです。 私は押したままにすると、「RIGHTのLEFT」それは正しくかつ継続的に私は左/右を押すことを登録します。しかし、 "LEFT"を押したまま "RIGHT"をタップすると、左右が押されたことが記録されますが、 "LEFT"がまだ押されていることを登録するために停止します。

ご協力いただければ幸いです。 Misha

答えて

1

私のコードでは、「繰り返し」は正しく表記されています。

私の問題の回避策が見つかりました。上記のコードは変更する必要があります。

pygame.key.set_repeat(50,50) 
bProgramLoop = True 
while (bProgramLoop == True): 

    for event in pygame.event.get(): 
     if (event.type == pygame.QUIT): 
      bProgramLoop = False 
     if (event.type == pyame.KEYDOWN): 
      if (event.key == pygame.K_a) # if A is pressed 
       bKeyA = True    # set the Boolean True 
      if (event.key == pygame.K_s) 
       bKeyS = True 
     if (event.type == pyame.KEYDOWN): 
      if (event.key == pygame.K_a) # if A is released 
       bKeyA = False# set the Boolean False 
      if (event.key == pygame.K_s) 
       bKeyS = False 

    if (bKeyA == True): 
     Execute_function1() 
    if (bKeyB == True): 
     Execute_function2() 

二重チェックでは、繰り返しのスペルが正しく表示され、もう一度タップするとキーボード入力が続行されません。問題は、私がそれを理解することができ、鍵が押された時点で一度も起こることです。別のキーが同時に押されると、イベントは失われます。

したがって、解決策は、キーが持ち上げられるまで変数をtrueに設定することで、変数はfalseに設定されます。

0

pygame.key.repeat()にスペルミスがあります。私はこれを修正し、それは私のために働いた。

def main(): 
    while Running: 
     check_events() 
     update() 
     clock.tick(FPS) 

def check_events(): 
    events = pygame.event.get() 
    for event in events: 
     if event.type == pygame.QUIT: 
      sys.exit() 

      if key == pygame.K_q: 
       Running = False 
       return 

     if (pygame.key.get_pressed()[pygame.K_LEFT]): 
      #EXECUTE_FUNCTION1() 
      print "left" 
     if (pygame.key.get_pressed()[pygame.K_RIGHT]): 
      #EXECUTE_FUNCTION2() 
      print "right" 
+0

ありがとう、これも動作します。あなたのすばやい返信にとても感謝しています – Misha

+0

これが正解であれば、それに印を付けてください! – marienbad

関連する問題