som*_*his 5 scripts games epiphany xdotool
我正在尝试自动化我最喜欢的 Boulderdash 克隆“Epiphany”(可通过 Ubuntu 软件中心获得)中的关键操作。
在以下示例中,角色应移动:3x“向下箭头”和 1x“向右箭头”。

编写脚本非常简单。启动后,它 (1) 将焦点设置到游戏窗口并 (2) 通过 Xdotool 发送击键命令。
#!/bin/bash
# set focus to epiphany
xdotool search --onlyvisible --class epiphany windowactivate
sleep 0.5
# move down one unit
xdotool keydown --delay 100 Down Arrow; xdotool keyup --delay 12 Down Arrow
# move down one unit
xdotool keydown --delay 100 Down Arrow; xdotool keyup --delay 12 Down Arrow
# move down one unit
xdotool keydown --delay 100 Down Arrow; xdotool keyup --delay 12 Down Arrow
# move right one unit
xdotool keydown --delay 100 Right Arrow; xdotool keyup --delay 12 Right Arrow
Run Code Online (Sandbox Code Playgroud)
但是,这个解决方案并不能始终如一地发挥作用。
有时角色仅完成部分移动 - 例如仅 2x“向下箭头”。有时他移动得太慢而被钻石压碎。
有没有关于如何解决这个问题的建议 - 最好使用 Xdotool?
编辑:
像建议的那样简单的命令xdotool key Down Arrow不起作用。游戏中的角色根本不动。
减少延误似乎是显而易见的答案。默认值为 12 毫秒,您已将按下箭头时的时间提高到 100 毫秒,但没有解释原因。
不必使用keydownthenkeyup并不必担心延迟和所有爵士乐,只需使用key. 这使您可以像老板一样将密钥链接在一起:
xdotool key Down Down Down Right
Run Code Online (Sandbox Code Playgroud)
如果你发现这太快了,请重新引入你的--delaybut,从12开始,直到它起作用为止。