Ключи не регистрируются (pygame) - я убежден, что pygame прямо сломан - PullRequest
0 голосов
/ 16 февраля 2019

Почему это не работает

import pygame

pygame.init()

while True:
    pressed = pygame.key.get_pressed()
    for event in pygame.event.get():
        if event.type == pygame.KEYDOWN:
            if pressed[pygame.K_w]:
                print("w is pressed")
            elif pressed[pygame.K_s]:
                print("s is pressed")

Сегодня я установил pygame и python.Теоретически он должен быть последним из pygame и python.этот код прошел много итераций, и ни одна из них не сработала.Я даже попытался:

print(pygame.key.get_pressed()[pygame.K_w])

, и это напечатало только 0. Даже при нажатии и удерживании w.Я перепробовал все.Я попытался использовать:

pygame.event.pump()

, но это ничего не сделало.

без ошибок или чего-либо, просто ничего не происходит.он просто печатает то, что я печатаю на экране.

Я никогда раньше не публиковал в stackoverflow, поэтому извините, если я что-то сделал не так.

Редактировать: Я изменилкод откуда-то отсюда

import pygame

pygame.init()

while True:
    for event in pygame.event.get() :
      if event.type == pygame.KEYDOWN :
        if event.key == pygame.K_SPACE :
          print ("Space bar pressed down.") #Here you should put you program in the mode associated with the pressed SPACE key
        elif event.key == pygame.K_ESCAPE :
          print ("Escape key pressed down.")
      elif event.type == pygame.KEYUP :
        if event.key == pygame.K_SPACE :
          print ("Space bar released.")
        elif event.key == pygame.K_ESCAPE :
          print ("Escape key released.") #Time to change the mode again

ничего.абсолютно ничего.

Ответы [ 2 ]

0 голосов
/ 16 февраля 2019

Состояние, которое возвращается pygame.key.get_pressed(), оценивается как pygame.event.get().

Это man pygame.event.get() должно быть выполнено первым.Обратите внимание, что если вы сделаете это в обратном порядке и произойдет событие нажатия клавиши, цикл событий будет запущен, но pygame.key.get_pressed() уже вернул устаревшие состояния.Таким образом, состояния pressed[pygame.K_w] и event.type == pygame.KEYDOWN никогда не будут выполнены при одном и том же запуске цикла.Это будет выполнено в 2 последовательных циклах выполнения.

Измените свой код следующим образом, чтобы решить проблему:

events = pygame.event.get()
pressed = pygame.key.get_pressed()

for event in events:
    if event.type == pygame.KEYDOWN:
        if pressed[pygame.K_w]:
            print("w is pressed")
        elif pressed[pygame.K_s]:
            print("s is pressed")
0 голосов
/ 16 февраля 2019

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

Кроме того, вы смешиваете шаблон "for" в pygame.event.get (): "и" pygame.key.get_pressed ".() "шаблон.

...