在Python中使用keydown/keyup的基本输入

问题描述:

我目前正在尝试在python中创建一个小游戏,但是当我尝试使用keydown/keyup事件时,我的系统会将这两个事件解释为一个。我写了一个简单的脚本来监视由'pygame'(一个简化python游戏的模块)创建的事件,当我按下一个键时,它立即在python shell中显示keydown和keyup事件:code screenshot。这与我的键盘有关吗?在Python中使用keydown/keyup的基本输入

+0

请阅读[this](http://*.com/help/mcve)。提供代码的相关部分。复制并粘贴纯文本,不要发布屏幕截图。 – timgeb

+0

好吧,我添加了代码的截图,但是我没有将它放在第一位,因为这很可能与我的问题无关。 – samYemmY

+0

为了将来的使用:问题编辑器中有“代码”标签。如果代码太多,请使用pastebin.org或类似的代码。 –

KEYDOWN事件之后紧接着的KEYUP事件的问题是由display = pygame.display.set_mode((800, 600))行在您的主循环中造成的。该程序正在循环的每次迭代中创建一个新的显示。这一行,需要放在主循环之前,因为它应该放在主循环之前。这与pygame.display.set_caption()一样,因为它只需要调用一次。

这样做应该通过KEYUP事件清除你的问题;然而,按住键仍然不会工作,因为Pygame初始化时默认关闭键重复。要启用它,必须调用pygame.key.set_repeat(delay, interval)方法。这也应该在你的主循环之前。

在该方法中,值delay是第一次按键重复发生之前的延迟将以毫秒为单位发生,如果它设置为零,则键重复将被禁用。值interval是第一次之后每个连续重复之间的时间。这个文档可以发现here in the Pygame documantation,其中描述如下:

启用键盘重复,保留的向下键将产生多个pygame.KEYDOWN事件。延迟是第一次重复pygame.KEYDOWN发送之前的毫秒数。之后,另一个pygame.KEYDOWN将每间隔毫秒发送一次。如果没有参数通过,则重复键被禁用。

pygame初始化时,密钥重复被禁用。

作为一个例子:pygame.key.set_repeat(1, 15)将基本上没有延迟,应该提供一个大体上平稳的旅行。