2016-05-03 2 views
1

Я пытаюсь получить ввод с клавиатуры пользователя с помощью pygame. Однако проблема заключается в том, что после запуска моего кода в IDLE ввод в клавиатуру никогда не читается программой, и все, что я набираю, отображается в оболочке. Такая же проблема, если я запускаю свой код на PyCharm. Есть идеи? Ниже мой код:Проблема ввода с клавиатуры Pygame

pygame.init() 
screen = pygame.display.set_mode((800, 600)) 
running = True 
while running: 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      running = False 
     elif event.type == KEYDOWN and event.key == pygame.K_w: 
      print("Yup!") 
    pygame.display.flip() 
+0

Почему хак вы работаете в 'pygame' приложение в терминале? ! 'pygame' предназначен для игр в не-терминальных окнах! – linusg

+0

Это не сработало, даже если я бежал с помощью IDLE или pycharm ... – lanlan2271

+0

Убедитесь, что окно pygame имеет фокус, иначе ваш ввод на клавиатуре не будет распознан! – linusg

ответ

0

Этот код работает отлично для меня

import pygame 

pygame.init() 
windowSize = width,height = 800,600 
screen = pygame.display.set_mode(windowSize) 


running = True 
while running: 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      running = False 
      quit() 

     elif event.type == pygame.KEYDOWN: 
      if event.key == pygame.K_w: 
       print("Yup!") 



    pygame.display.flip() 
0

У меня точно такой же вопрос, а также на Mac с помощью PyCharm и питона 3.6. Я печатаю события, и записываются только события MouseMotion, а не KeyDown.

Edit:, по-видимому, это известная проблема: Window does not get focus on OS X with Python 3

Это мой код, и он также должен работать:

while not crashed: 
for event in pygame.event.get(): 
    print(event) 
    if event.type == pygame.QUIT: 
     crashed = True 

    # get current list 
    pressed = pygame.key.get_pressed() 
    if pressed[pygame.K_UP]: 
     print("UP") 

    if event.type == pygame.KEYDOWN: 
     if event.key == pygame.K_1: 
      print('this DOES work! :)') 
     elif event.key == pygame.K_LEFT: 
      x_change = -5 
     elif event.key == pygame.K_RIGHT: 
      x_change = 5 
     elif pressed[pygame.K_UP]: 
      print("UP") 
    if event.type == pygame.KEYUP: 
     if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT: 
      x_change = 0 

    pygame.display.flip() 

x += x_change 

gameDisplay.fill(black) 
ship(x, y) 

pygame.display.update() 
clock.tick(60) 
Смежные вопросы