在我正在开发的游戏中,我想检测NUMLOCK
keypress (or keyup),就像在按下时注册一个“回调”函数。
我并不是要求阅读它state在某一特定时刻,我已经可以做到了 https://github.com/MestreLion/pyrogue/blob/master/pyrogue/input.py,我也没有兴趣改变它的价值。这是关于意识到按键当它发生时所以我不必每隔十分之一秒左右轮询一次它的状态。
游戏使用curses
,目前处于阻塞状态getch()
。诅咒无法检测到NUMLOCK
按键,我从来没有想到过(LED相关的键盘不会“产生”任何按键),我想知道是否有任何方法可以做到这一点,这比用非阻塞替换主诅咒循环更好getch()
并致电keyboard_leds()
函数读取当前状态。
例如:我可以在初始化curses后启动一个新线程,传递它的stdscr
screen 作为参数,该线程将注册一个回调函数(例如,special_keypress()
)对于事件NUMLOCK
按键。因此,该函数只会调用keyboard_leds()
需要时,然后更新stdscr
.
我不确定这是否可行,而且我知道我可能必须深入研究一些依赖于体系结构的东西(内核/X11等),所以如果跨平台解决方案不可能,那么我对只使用 Linux 的系统很满意。
好吧,这就像使用蒸汽锤来敲坚果(特别是如果您正在创建一个类似 CLI 的 Rogue 游戏),但是 Pyglet 在 OS X 中至少可以按下 NUMLOCK 按键。我无法让它与任何一个一起工作CAPSLOCK
or SCROLLLOCK
虽然如此,但我的系统热键几乎以各种可能的方式被覆盖,所以可能只是我。
您可以尝试测试它是否更适合您,然后看看 Pyglet 如何检测这些键。
import pyglet
from pyglet.window import key
window = pyglet.window.Window()
@window.event
def on_key_press(symbol, modifiers):
if symbol == key.NUMLOCK:
print 'NumLock was pressed, yay!'
elif symbol == key.CAPSLOCK:
print 'CapsLock was pressed, yay!'
elif symbol == key.SCROLLLOCK:
print 'ScrollLock was pressed, yay!'
@window.event
def on_draw():
window.clear()
if __name__ == '__main__':
pyglet.app.run()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)