Как добавить ключевые команды в спрайт? - PullRequest
0 голосов
/ 01 апреля 2012

Как мне добавить ключевые команды к спрайт-сантехникам?Ниже моя попытка, но пока нет результата при нажатии кнопки вверх.Как бы установить 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)

1 Ответ

0 голосов
/ 01 апреля 2012

Удалите строки

event = pygame.event.poll()

и первый случай

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

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

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

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

Пример кода:

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...