我正在尝试自动执行我最喜欢的 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
但是,这种解决方案并不总是有效。
有时角色只能完成部分动作 - 例如,只有 2 次“向下箭头”。有时,他的移动速度太慢,被钻石压垮。
关于如何解决这个问题有什么建议吗——最好使用 Xdotool?
编辑:
像建议的这样简单的命令xdotool key Down Arrow
不起作用。游戏中的角色根本就不动。
答案1
减少延迟似乎是显而易见的答案。默认值为 12 毫秒,而您却将箭头按下的延迟提升至 100 毫秒,却没有解释原因。
无需使用keydown
thenkeyup
并担心延迟和所有那些麻烦事,只需使用 即可key
。这允许您像老板一样将键链接在一起:
xdotool key Down Down Down Right
如果您发现这太快,请重新引入,--delay
但从 12 开始,直到有效为止。