Pygame 无法正确处理键盘或鼠标事件



我最近在Mac上重新安装了pygame。我安装了pygame 1.9.2a0。我的Windows上有相同的版本,在这台Mac上也有相同的版本。但是这个新安装得到了奇怪的结果。我注意到所有绘制命令都工作正常,但由于某种原因,单击 pygame 窗口不起作用。窗口在后台打开,这是不正常的,但这不是一个大问题。但是,所有按键都会重定向到终端/IDE(从哪个终端/IDE(从哪个运行应用程序)。我在下面附上了一个非常简单的程序,我正在使用该程序进行测试。程序只查找转义键。请注意,这在我的窗口机器上工作得很好。

TL;DR:为什么选择窗口时,按键会发送到终端而不是 pygame 窗口的事件循环。

我对这个问题感到困惑,主要是因为我以前没有遇到过这样的问题。我也不确定如何调试这个问题。如果需要更多信息,我很乐意提供。

import pygame
import sys
from pygame.locals import *
pygame.init()
size = width, height = 100, 100
screen = pygame.display.set_mode(size)
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
        elif event.type == KEYDOWN:
            if event.key == K_ESCAPE:
                pygame.event.post(pygame.event.Event(QUIT))
    screen.fill((30, 30, 30))
    pygame.display.flip()

对于好奇的人:

  • MacOSX 10.10.1
  • Python 3.4.2 (via pyenv)
  • 游戏:1.9.2a0

更新:

我有一个理论,即在其中一个较新的提交中出现了某种问题。所以我决定拉下他们的存储库并恢复到以前的提交。这似乎相当有希望,特别是因为他们在 2015 年 1 月初进行了 8 个左右拉取请求的"大爆炸"合并。因此,在发生大规模合并之前,我将存储库拉回了提交,并且问题完全相同。我决定对其他几个提交(在合并位置之前和之后)执行此操作,但仍然没有更改。有什么建议吗?

看起来您正在尝试制作关机键而不必使用角落中的 X。这就是我在需要时为解决这个问题所做的。

key = pygame.key.get_pressed()
running = 1
while running:
  for event in pygame.event.get():
if event.type == QUIT:
    pygame.quit()
    running = 0
elif key[pygame.K_ESCAPE]:
    pygame.quit()
    running = 0

希望这有帮助。顺便说一下,转义键并不总是有效,所以可以将其设置为不同的键绑定。对于鼠标,您需要检查鼠标的位置。

def run():
    pos = pygame.mouse.get_pos()
#check_events
check_events(pos)

如果您只是想在按下 Esc 键的同时退出游戏,那么您应该在事件循环中执行以下操作......

for event in pygame.event.get():
     if event.type == pygame.KEYDOWN:
          if event.key == pygame.K_ESCAPE:
               pygame.quit()
               quit()

这将只涵盖转义键。如果需要,您可以稍后添加窗口"X"按钮。Windows和Apple pygame版本之间会出现一些问题。

希望这对您的问题有所帮助!

最新更新