【问题标题】:Basic input with keydown/keyup in PythonPython 中的 keydown/keyup 基本输入
【发布时间】:2017-02-04 03:12:01
【问题描述】:

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

【问题讨论】:

  • 请阅读this。提供代码的相关部分。复制粘贴纯文本,请勿截图。
  • 好的,我添加了代码的屏幕截图,但我没有首先发布它,因为这很可能与我的问题无关。
  • 供将来使用:问题编辑器中有“代码”标签。如果代码太多,请使用 pastebin.org 之类的。

标签: python events pygame


【解决方案1】:

在 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) 基本上不会有延迟,应该会提供大部分顺畅的旅行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多