2012-03-28 5 views
2

Ich muss in der Lage, die Maus zu bewegen, während ich keydown Ereignisse am Umgang.kann nicht Maus zur gleichen Zeit wie keyDown Python bewegen?

Wie mache ich das?

Hier ist der grundlegende Code, den ich jetzt bin mit:

import pygame, sys 
from pygame.locals import * 

pygame.init() 

while True: 
    for event in pygame.event.get(): 
     if event.type == QUIT: 
      pygame.quit() 
      sys.exit() 
     if event.type == USEREVENT + 1: 
      rotate = True; 
     if event.type == KEYDOWN: 
      if event.key == K_LEFT or event.key == K_a: 
       moveX = -1*moveSpeed 
      elif event.key == K_RIGHT or event.key == K_d: 
       moveX = moveSpeed 
      if event.key == K_DOWN or event.key == K_s: 
       moveY = moveSpeed 
      elif event.key == K_UP or event.key == K_w: 
       moveY = -1*moveSpeed 

ich nicht der Maus, während das folgende Skript ausgeführt bewegen kann, und ich bin eine Taste nach unten drücken ..

Antwort

2

der Haupt Problem mit Schleife ist, dass Sie keine Verzögerung zwischen „Rahmen“ haben - das heißt, dass man einfach Zyklus über die Ereignisschleife bei maximaler CPU-Geschwindigkeit - das ist ein Tastendruck macht viel (vielen Sinn vermutlich um Millionen Größenordnung) erzeugt von Schlüsseln-down Veranstaltungen Das ist lesen.

So:

  1. eine pygame.time.delay(x) in Ihrem whiel Schleife einzufügen, mit x irgendwo zwischen 15 und 100 - dies wird Ihnen so viele miliseconds der Pause zwischen den Wechselwirkungen auf
  2. einen pygame.event.pump() Anruf innerhalb des Einsatzes Schleife - das wird er Ereignis Puffer fließt hapilly und verhindern subtiles schlechtes Verhalten über verschiedenen Systemen
  3. dies ist nicht mit Ihrem Problem verbunden - aber, gibt es absotely keine Notwendigkeit, so etwas wie „-1*moveSpeed“ zu den negativen Wert einer Variablen erhalten - nur statt „-moveSpeed“ verwenden.

Auch sollte dies das Einfrieren stoppen, aber pygame kann nur erfassen Maus oder Tastenereignisse innerhalb der eigenen Anzeigefenster - die Sie nicht initialisiert wird - Sie müssen pygame.display.set_mode anrufen, um tatsächlich etwas zu sehen.

Verwandte Themen