2012-03-31 1 views
0

Как бы добавить ключевые команды для сантехники? Ниже приведена моя попытка, но нет результата при нажатии кнопки «вверх». Как бы я установил ud, и ld изменился на 10 при нажатии кнопки кнопки?Как добавить ключевые команды для спрайтов?

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) 

ответ

0

Удалить линии

event = pygame.event.poll() 

и первое вхождение

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

Проблемы в том, что как опрос и получить принимать событие от очереди событий, так что вы теряете ключ вверх события в опросе.

Другими словами, что происходит, это:

  1. Вы нажимаете клавишу вверх
  2. Это вставит событие KeyDown в очередь
  3. вызове события = pygame.event.poll()
  4. это возвращает событие KEYDOWN
  5. вы проверяете, есть ли это QUIT, это не так, вы продолжаете
  6. вы вызываете pygame.event.get(), но очередь Теперь пустой, так что цикл не получает вошел

Пример кода:

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

Я попробовал и получил: 'AttributeError:«INT»объект не имеет атрибута«key_event'' это в refrence to: 'w.key_event (event)' Что бы я заменил событие? – enrique2334

+0

Я думаю, это связано с тем, что в вашем коде w есть целое число, но вы пытаетесь использовать его как объект с key_event как функцию-член. Я добавил версию кода, который я использовал для ответа (который имеет некоторые изменения в способе вызова key_event) –

+0

Так что это дает мне эту ошибку 'TypeError: key_event() принимает ровно 2 аргумента (1 данный)', как мне добавьте второй аргумент/что бы сделал второй аргумент. – enrique2334