2015-01-01 4 views
1

Я вроде бы застрял с предполагаемым простым кодом, чтобы проверить, нажал ли пользователь «w» или «s».pygame - нажатие клавиши

Ниже вы можете увидеть мой код:

import pygame 
pygame.init() 

while True: 
    for event in pygame.event.get(): 
     if event.type == pygame.KEYDOWN and event.key == pygame.K_w: 
      print('Forward') 
     elif event.type == pygame.KEYDOWN and event.key == pygame.K_s: 
      print('Backward') 

Am Я забывания что-то здесь?

Спасибо!

ответ

0

окно должно быть создано, чтобы получить нажатия клавиш, следующие работы.

import pygame 
import sys 
pygame.init() 

pygame.display.set_mode((100, 100)) 

while True: 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      sys.exit() 
     if event.type == pygame.KEYDOWN: 
      if event.key == pygame.K_w: 
       print('Forward') 
      elif event.key == pygame.K_s: 
       print('Backward') 
+0

Спасибо rpattiso. Есть ли способ отключить окно? Благодаря! –

+0

@ user1688175 Я так не думаю, потому что ОС посылает нажатия клавиш в окно с фокусом. Вы не пытаетесь создать регистратор ключей? размер '(1, 1)' наименьший, так как '(0, 0)' даст вам полный размер экрана. – ryanpattison

-1

Попробуйте это:

import pygame 
pygame.init() 
key = pygame.key.get_pressed() 
while True: 
    for event in pygame.event.get(): 
     if event.type == KEYDOWN and event.key == pygame.K_w: 
      print('Forward') 
     elif event.type == KEYDOWN and event.key == pygame.K_s: 
      print('Backward') 
+0

Hi Mohit. К сожалению, он не работает и не возвращает ошибку. Спасибо в любом случае –

+0

@ user1688175 Отредактированный мой код, попробуйте меня и дайте мне знать –

1

Это то, что мне кажется самым простым и понятным способом сделать это:

import pygame 
pygame.init() 
pygame.display.set_mode((300, 300)) 
running = True 

while running: 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      running = False 
      pygame.quit() 
     if event.type == pygame.KEYDOWN: 
      if event.key == pygame.K_w: 
       print('Forward') 
      elif event.key == pygame.K_s: 
       print('Backward') 

Вместо использования sys.exit() метод я предпочитаю просто использовать pygame.quit()

0

Нехорошо просить геймера продолжать атаку w, чтобы получить ответ. Если вы хотите прочитать «нажатое» состояние. Вы можете рассмотреть следующие вопросы:

from pygame import * 
    import time 
    flag = False # The flag is essential. 
    DONE = False 
    screen = display.set_mode((500,500)) # 1180, 216 
    count=0 
    while not DONE: 
     event.pump() # process event queue 
     keys = key.get_pressed() # It gets the states of all keyboard keys. 
     #print("%d"%count,keys) 
     count+=1 
     if keys[ord('w')]: # And if the key is K_DOWN: 
      print("%d w down"%count) 
     if keys[ord('s')]: # And if the key is K_DOWN: 
      print("%d s down"%count) 
     time.sleep(0.1) 
Смежные вопросы