2012-03-31 34 views
0

Wie würde ich den Sprite-Installateuren Tastaturbefehle hinzufügen? Unten ist mein Versuch bis jetzt, aber es gibt kein Ergebnis, wenn ich die Auf-Taste drücke. Wie würde ich ud und ld um 10 ändern, wenn Taste gedrückt wird?Wie füge ich Schlüsselbefehle zu Sprite hinzu?

pink = (255, 64, 64) 
w = 640 
h = 480 
ld = 0 
ud = 0 
screen = pygame.display.set_mode((w, h)) 
running = 1 
def key_event(self, event): 

     if event.key == pygame.K_UP: 
      ud - 10 
      ld + 10 
def show_sprites(): 
    screen.blit(plumbers,(50+ld ,100+ud)) 
def setup_background(): 
    screen.fill((pink)) 
    screen.blit(cloud_background,(0,0)) 
    brick_width, brick_height = brick_tile.get_width(), brick_tile.get_height() 
    for x,y in itertools.product(range(0,640,brick_width), 
           range(390,480,brick_height)): 
     screen.blit(brick_tile, (x,y)) 

while running: 

    setup_background() 
    event = pygame.event.poll() 
    show_sprites() 
    pygame.display.flip() 

    if event.type == pygame.QUIT: 
     sys.exit() 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      running = False 
     elif event.type == pygame.KEYDOWN: 
      w.key_event(event) 

Antwort

0

Löschen Sie die Linien

event = pygame.event.poll() 

und das erste Auftreten von

if event.type == pygame.QUIT: 
    sys.exit() 

Das Problem ist, dass sowohl Umfrage und erhalten die Ereigniswarteschlange nehmen Ereignisse ab, so dass Sie die Taste nach oben verlieren Ereignisse im Aufruf zur Abstimmung.

Mit anderen Worten, was passiert ist:

  1. Sie drücken Sie die Taste UP
  2. Dies das KeyDown-Ereignis in die Warteschlange fügt
  3. Sie Ereignis aufrufen = pygame.event.poll()
  4. dies gibt dem Ereignis KeyDown
  5. Sie sehen, prüfen, ob diese Quit ist, ist es nicht so ist, dass Sie auch weiterhin
  6. Sie rufen pygame.event.get(), aber die Warteschlange jetzt leer, so dass die for-Schleife nicht

Beispiel Code eingegeben erhalten:

import pygame 
pink = (255, 64, 64) 
w = 640 
h = 480 
ud = 0 
ld = 0 
screen = pygame.display.set_mode((w, h)) 
running = 1 
def key_event(event): 
    global ud 
    if event.key == pygame.K_UP: 
     ud -= 10 
     print 'ud',ud   

def setup_background(): 
    screen.fill((pink)) 

while running: 

    setup_background() 
    pygame.display.flip() 

    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      running = False 
     elif event.type == pygame.KEYDOWN: 
      key_event(event) 
+0

ich versucht und bekam: 'Attribute: 'int' Objekt hat kein Attribut‚key_event'' dies in refrence ist an: 'w.key_event (event)' Womit würde ich das Ereignis ersetzen? – enrique2334

+0

Ich denke, das ist, weil in Ihrem Code w eine ganze Zahl ist, aber Sie versuchen, es als ein Objekt mit key_event als eine Member-Funktion zu verwenden. Ich habe die Version des Codes hinzugefügt, den ich der Antwort verwendet habe (was einige Änderungen an der Art hat, wie key_event aufgerufen wird) –

+0

Das gibt mir diesen Fehler 'TypeError: key_event() nimmt genau 2 Argumente (1 gegeben)' wie mache ich füge ein zweites Argument hinzu/was würde das zweite Argument tun. – enrique2334

Verwandte Themen