游戏脚本开发:如何通过按键随时跳出指定if语句?
解决方案
核心思路是把中断检测直接嵌入到按键序列的执行循环中,不用多进程终止的方式,既能中断当前的操作序列,又能保留外层循环持续运行。
修改后的基础版本代码
import keyboard import pyautogui import time def sequence(): keys = ["w","a","s","d","w","a","s","d"] while True: # 等待F1触发按键序列 if keyboard.is_pressed("f1"): print("开始执行按键序列") # 遍历按键序列,每一步都检查中断信号 for key in keys: # 检测到Q键按下,立即跳出当前序列循环 if keyboard.is_pressed('q'): print("中断当前按键序列") # 主动抬起当前按键,避免游戏角色卡住 pyautogui.keyUp(key) break # 执行单次按键操作 pyautogui.keyDown(key) time.sleep(0.5) pyautogui.keyUp(key) time.sleep(0.1) # 序列执行完毕或中断后,回到外层循环等待下一次F1触发 if __name__ == '__main__': sequence()
关键修改点
- 移除了多进程相关代码,所有逻辑整合到同一函数,避免进程终止导致的外层循环停止
- 在每个按键操作前加入Q键检测,触发后直接break跳出当前的按键序列循环(即你要中断的目标逻辑)
- 中断时主动抬起当前按键,防止游戏内角色保持按键状态
- 外层
while True持续运行,中断后可再次按F1触发新序列
更灵敏的事件驱动版本
如果轮询检测按键不够灵敏,可改用事件回调的方式,响应更快:
import keyboard import pyautogui import time # 全局中断标志 interrupt_flag = False def trigger_interrupt(e): global interrupt_flag interrupt_flag = True # 注册Q键按下的回调事件 keyboard.on_press_key('q', trigger_interrupt) def sequence(): keys = ["w","a","s","d","w","a","s","d"] while True: global interrupt_flag # 每次触发新序列前重置中断标志 interrupt_flag = False if keyboard.is_pressed("f1"): print("开始执行按键序列") for key in keys: if interrupt_flag: print("中断当前按键序列") pyautogui.keyUp(key) interrupt_flag = False break pyautogui.keyDown(key) time.sleep(0.5) pyautogui.keyUp(key) time.sleep(0.1) if __name__ == '__main__': sequence()
内容的提问来源于stack exchange,提问作者Vee
相关产品推荐
相关产品推荐

