如何在Python中使用Ursina检测左右Shift按键的按下事件
Ursina引擎左右Shift键按下事件检测方案
原生功能实现(推荐优先使用)
Ursina 3.0及以上版本原生支持区分左右Shift键,无需引入第三方依赖,有两种常用检测方式:
- 实时检测按住状态:直接调用全局变量
held_keys判断对应按键状态 - 监听单次按下/抬起事件:在
input回调函数中匹配对应按键名
示例代码
from ursina import * app = Ursina() # 每帧执行,检测持续按住状态 def update(): if held_keys['left shift']: print("左Shift处于按住状态") if held_keys['right shift']: print("右Shift处于按住状态") # 按键触发时执行,检测单次按下/抬起 def input(key): if key == 'left shift': print("左Shift被按下") if key == 'right shift': print("右Shift被按下") if key == 'left shift up': print("左Shift被抬起") if key == 'right shift up': print("右Shift被抬起") Text(text="按下/按住左右Shift测试效果", position=(0, 0.3), scale=2) app.run()
第三方库兼容方案(仅适用于Ursina旧版本不支持原生检测的场景)
如果使用的Ursina版本过低无法识别左右Shift按键,可以使用pynput库实现需求,它可以精确识别各类左右修饰键,和Ursina的兼容性良好。
使用步骤
- 安装依赖:执行命令
pip install pynput - 结合Ursina的实现代码如下:
from ursina import * from pynput import keyboard app = Ursina() # 按键按下回调 def on_press(key): if key == keyboard.Key.shift_l: print("左Shift被按下") elif key == keyboard.Key.shift_r: print("右Shift被按下") # 按键抬起回调 def on_release(key): if key == keyboard.Key.shift_l: print("左Shift被抬起") elif key == keyboard.Key.shift_r: print("右Shift被抬起") # 启动后台监听线程,daemon参数保证程序退出时监听线程自动关闭 listener = keyboard.Listener(on_press=on_press, on_release=on_release, daemon=True) listener.start() Text(text="使用pynput检测左右Shift", position=(0, 0.3), scale=2) app.run()
注意:pynput默认是全局按键监听,如果需要仅监听Ursina窗口内的按键事件,可以额外增加Ursina窗口焦点判断逻辑。
内容的提问来源于stack exchange,提问作者Michael
相关产品推荐
相关产品推荐

