Я пытаюсь автоматизировать критические ходы в моем любимом клоне Boulderdash под названием «Крещение» (доступен через Ubuntu Software Center).
В следующем примере символ должен двигаться: 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
Но, это решение не работает последовательно.
Иногда персонаж завершает только часть движения - e. г. только 2x "Стрелка вниз". В других случаях он движется слишком медленно и сокрушается алмазом.
Есть ли какие-либо предложения о том, как решить эту проблему - предпочтительно с помощью Xdotool?
Редактировать:
Простые команды, такие как xdotool key Down Arrow
, как было предложено, не работают. Персонаж в игре вообще не двигается.
Сокращение ваших задержек кажется очевидным ответом. По умолчанию это 12 мс, и вы увеличили это значение до 100 мс для ваших нажатий стрелок, не объясняя почему.
И вместо использования keydown
, затем keyup
и необходимости беспокоиться о задержках и прочем джазе, просто используйте key
. Это позволяет вам просто соединять ключи вместе, как босс:
xdotool key Down Down Down Right
Если вы обнаружите, что это слишком быстро, снова введите ваш --delay
, но начните с 12 и продолжайте работать до тех пор, пока он не сработает.