2016-05-03 9 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

このコードは、私がPycharmとPython 3.6を使用してもMac上で、正確に同じ問題を抱えている私

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

のために完璧に動作します。私はイベントを印刷しており、KeyDownではなくMouseMotionイベントのみが記録されます。

編集:どうやらそれは既知の問題です: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) 
関連する問題