2016-04-27 5 views
1

Ich bin wieder fest und kann keine gültigen Lösungen online finden. Ich versuche, Pygame und seine Schlüsseleingaben zu verwenden, um verschiedene Dinge zu steuern. Jetzt muss ich mehrere Schlüssel gleichzeitig benutzen. Mein Code ist wie folgt:pygame kontinuierliche und gleichzeitige Tasteneingaben

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" 

Jetzt ist das Problem, das ich habe, ist: Wenn ich halten Sie „LINKS RECHTS“ es richtig und kontinuierlich registriert, dass ich links/rechts gedrückt. ABER wenn ich in "LINKS" halte und nur auf "RECHTS" tippe, registriert es, dass Links und Rechts gedrückt wurden, aber es stoppt dann um zu registrieren, dass "LINKS" noch gedrückt wird.

Irgendwelche Ideen jemand? Jede Hilfe würde sehr geschätzt werden. Misha

Antwort

1

In meinem Code ist die "Wiederholung" richtig geschrieben.

Ich fand die Arbeit für mein Problem. Der obige Code muss geändert werden.

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() 

Ich doppelt überprüft, wird die Wiederholung richtig geschrieben und es würde keine Tastatureingabe fortgesetzt, sobald ein weiteres abgehört wurde. Das Problem ist, soweit ich es herausfinden kann, und tritt sogar einmal auf, wenn eine Taste gedrückt wird. Wenn eine andere Taste gleichzeitig gedrückt wird, ist das Ereignis verloren.

Die Lösung besteht also darin, eine Variable auf wahr zu setzen, bis der Schlüssel angehoben wird und somit die Variable falsch gesetzt wird.

0

Sie haben eine Wiederholung in pygame.key.repeat() falsch geschrieben. Ich habe das korrigiert und es hat für mich funktioniert.

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

danke, das funktioniert auch. sehr geschätzt für Ihre schnelle Antwort !! – Misha

+0

Wenn dies eine korrekte Antwort ist, bitte markieren Sie sie so! – marienbad

Verwandte Themen