我正在尝试使用 python 库pysdl2来构建一个模拟器。到目前为止,该库一直运行良好,但是我在接收键盘输入时遇到了问题。
我基本上需要做的是测试是否按下了某些键。在做了一些研究之后,我发现sdl2.SDL_GetKeyboardState
哪个 SDL 函数与SDL_GetKeyboardState
. 根据之前链接的文档和Lazy Foo' Productions 网站上的这篇文章,我构建了以下脚本:
import sdl2
sdl2.ext.init()
window = sdl2.ext.Window('Test', size=(640, 480))
window.show()
key_states = sdl2.SDL_GetKeyboardState(None)
running = True
while running:
for event in sdl2.ext.get_events():
if event.type == sdl2.SDL_QUIT:
running = False
break
if key_states[sdl2.SDL_SCANCODE_A]:
print('A key pressed')
window.refresh()
上面的代码假设检测a按键是否被按下,如果是则打印一条消息。运行上述程序时,确实会出现一个窗口,但当a按下该键时,'A key pressed'
会打印超过四千次。它不会继续打印消息,它只会打印数千次,然后停止。
起初,我认为问题可能是关键推演代码(第 15-16 行)应该在事件循环内部(第 11-14 行)。它在某种程度上起作用。它不是'A key pressed'
每次按键打印数千次,而是每次按键只打印两次。
我的代码有问题吗?我是否缺少有关如何正确使用该sdl2.SDL_GetKeyboardState
功能的信息?如何正确检测按键?