web-dev-qa-db-fra.com

Xdotool pour automatiser les déplacements dans Epiphany (Boulderdash Clone)

J'essaie d'automatiser les mouvements critiques dans mon clone préféré de Boulderdash appelé "Epiphany" (disponible via le Centre logiciel Ubuntu).

Dans l'exemple suivant, le caractère le caractère doit se déplacer: 3x "flèche vers le bas" et 1x "flèche vers la droite".

enter image description here

Écrire un script est assez simple. Une fois lancé, il (1) active la fenêtre du jeu et (2) envoie les commandes via 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

Mais cette solution ne fonctionne pas toujours.

Parfois, le personnage ne termine qu'une partie du mouvement - e. g. seulement 2x "Down Arrow". À d'autres moments, il se déplace trop lentement et est écrasé par le diamant.

Y at-il des suggestions sur la façon de résoudre ce problème - en utilisant de préférence Xdotool?


Modifier:

Les commandes simples comme xdotool key Down Arrow - comme suggéré - ne fonctionnent pas. Le personnage dans le jeu ne bouge pas du tout.

3
somethis

Réduire vos délais semble être la solution évidente. La valeur par défaut est 12 ms et vous l'avez augmentée à 100 ms pour les pressions sur les flèches, sans expliquer pourquoi.

Et au lieu d'utiliser keydown puis keyup et de vous inquiéter des retards et de tout ce jazz, utilisez simplement key. Cela vous permet d’enchaîner les clés ensemble, comme un patron:

xdotool key Down Down Down Right

Si vous trouvez que c'est trop rapide, réintroduisez votre --delay mais commencez à 12 et continuez jusqu'à ce que ça fonctionne.

1
Oli