Python格斗游戏状态机开发:如何捕获键盘输入实现按键响应?
Python键盘按键监听最简实现(对应Unity Input.GetKeyDown)
针对你的需求,pynput确实是跨平台(包括MacOS)监听键盘事件的靠谱方案,下面给你最简的实现代码,对应你提供的Unity C#逻辑:
首先安装pynput:
pip install pynput
核心代码,实现按Q键时打印消息:
from pynput.keyboard import Key, Listener def on_press(key): try: # 监听普通字符按键 if key.char == 'q': print("q key was pressed") except AttributeError: # 处理特殊按键(如Shift、Ctrl等,此处可忽略) pass def on_release(key): # 按Esc退出监听循环 if key == Key.esc: return False # 启动监听器 with Listener(on_press=on_press, on_release=on_release) as listener: listener.join()
代码说明
on_press函数会在任意按键按下时触发,我们只判断按下的是q字符时执行打印逻辑,和Unity的Input.GetKeyDown("q")逻辑一致。on_release里的Esc退出逻辑是为了方便终止程序,可按需调整。- MacOS下需给终端/IDE授权「辅助功能」权限(路径:系统设置-隐私与安全性-辅助功能),否则监听器会失效。
更简洁的备选方案:keyboard库
如果你觉得pynput的监听器模式有点绕,也可以试试keyboard库,语法更贴近Unity的Input风格:
安装:
pip install keyboard
实现代码:
import keyboard while True: if keyboard.is_pressed('q'): print("q key was pressed") # 加延迟避免重复触发(循环会快速检测) keyboard.wait('q', suppress=True) # 按Esc退出循环 if keyboard.is_pressed('esc'): break
keyboard.is_pressed()和Unity的Input.GetKeyDown()逻辑类似,suppress=True可避免按键事件被系统其他程序捕获,适合游戏场景。同样需要在MacOS下给应用授权辅助功能权限。
后续扩展建议
你可以把眩晕值的逻辑直接嵌入按键触发代码,比如:
stun_timer = 0 def on_press(key): global stun_timer try: if key.char == 'q': print("q key was pressed") stun_timer += 3 # 重攻击加3 elif key.char == 'w': stun_timer += 2 # 中攻击加2 elif key.char == 'e': stun_timer += 1 # 轻攻击加1 except AttributeError: pass
之后再单独开线程处理眩晕值的时间衰减逻辑即可。
内容的提问来源于stack exchange,提问作者Mitch
相关产品推荐
相关产品推荐

