【问题标题】:Pygame keyboard input issuePygame键盘输入问题
【发布时间】:2018-02-08 01:53:16
【问题描述】:

我正在尝试使用 pygame 获取用户键盘输入。然而,问题是在我在 IDLE 上运行我的代码后,程序永远不会读取键盘输入,并且我输入的任何内容都会显示在 shell 上。如果我在 PyCharm 上运行我的代码,同样的问题。任何想法?以下是我的代码:

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()

【问题讨论】:

  • 你为什么要在终端运行pygame 应用程序?! pygame 用于在非终端窗口中制作游戏!
  • 即使我使用 IDLE 或 pycharm 运行也没有用...
  • 确保pygame窗口有焦点,否则你的键盘输入将无法识别!
  • 当我运行代码时它是集中的,但仍然是同样的问题..键盘输入永远不会被读取......
  • 它不起作用,因为它无法检测到我键盘上按下的任何键。

标签: python keyboard pygame


【解决方案1】:

我在使用 Pycharm 和 python 3.6 的 Mac 上也遇到了完全相同的问题。我正在打印事件并且只记录 MouseMotion 事件,而不是 KeyDown。

编辑:显然这是一个已知问题: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)

【讨论】:

    【解决方案2】:

    这段代码非常适合我

    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()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-27
      • 2016-12-14
      • 1970-01-01
      • 1970-01-01
      • 2013-12-31
      • 1970-01-01
      • 2020-08-16
      • 2021-10-10
      相关资源
      最近更新 更多