█▄▀ Perfectionnement du script de marche
Dans ce tutorial, nous allons étudier un système permettant l'affichage parfait des sprites lorsque le personnage marche.
 
▫ Le Problème
if (keyboard_check(vk_right)) {
   direction = 0;
   sprite_index = link1_walk_right;
}

if (keyboard_check(vk_up)&&keyboard_check(vk_right)) {
   direction = 45;
   sprite_index = link1_walk_right;
}

if (keyboard_check(vk_up)) {
   direction = 90;
   sprite_index = link1_walk_up;
}

if (keyboard_check(vk_left)&&keyboard_check(vk_up)) {
   direction = 135;
   sprite_index = link1_walk_up;
}

if (keyboard_check(vk_left)) {
   direction = 180;
   sprite_index = link1_walk_left;
}

if (keyboard_check(vk_left)&&keyboard_check(vk_down)) {
   direction = 225;
   sprite_index = link1_walk_left;
}

if (keyboard_check(vk_down)) {
   direction = 270;
   sprite_index = link1_walk_down;
}

if (keyboard_check(vk_down)&&keyboard_check(vk_right)) {
   direction = 315;
   sprite_index = link1_walk_down;
}
Ce genre de scripts avec 8 conditions qui correspondent aux 8 directions ont un problème. Quand on appuie la touche gauche puis la touche haut ce n'est pas le même sprite que si on appuie la touche haut puis la touche gauche. Et puis il existe d'autres scripts (que je ne citerai pas ici par ce que j'ai pas envie d'en créer un) où lorsqu'on maintient enfoncé gauche puis droite et qu'on relâche gauche ça continue à marche en diagonal.
 
▫ Le Raisonnement logique
Alors nous allons tenter de créer un système idéal. Pour résoudre le problème : quel est la touche qui a été appuyé la première ? Nous allons donc faire un script à deux parties.
Dans la première partie, on détecte si l'une touche des quatres touches directionnelles est appuyée. On ne compte pas les combinaisons de touche, il y a juste 4 conditions. C'est cette touche qui détermine la version du sprite à utiliser (version marche vers lehaut, marche vres la gauche...). Tant que la touche est appuyée on ne repassera pas cette partie donc il faut mettre une condition au début qui vérifie avant d'exécuter la partie 1.

Dans la deuxième partie, il y a 4 cas possibles (donc 4 conditions):
- soit l'une des deux touches adjacente est appuyée (2 cas) donc on redirige la direction de l'objet (on ne change pas la version du sprite qui reste la même).
- soit il n'y a que la touche déterminant la direction du sprite qui est appuyée.
- soit la touche qui a déterminé le sprite n'est plus appuyé donc il faut obliger le script à repasser la partie 1.

Et si il y a des touches opposées qui sont pressé ? Nromalement cela ne peut arriver car comme vous l'avez vu dans le tutorial précédent, il faut créer une condition qui vérifie s'il existe ce genre de contradictions avant d'exécuter le script de marche.
 
▫ Schéma explicatif
- Si la touche qui a déterminé la version du sprite est relâché ou tout simplement si la phase 1 n'a pas encore été passée, il faut passer la phase 1
- sinon on passe directement à la phase 2.

Phase 1

détection des touches appuyées : -choix de la version du sprite à utiliser
Phase 2

Sélection de la branche selon la version du sprite
Ce qui est en rouge est impossible, donc il n'est pas nécessaire de créer des conditions pour ces cas. Par-contre ce qui est bleu indique un cas possible.

C'est tout ?

Réfléchissez et composez le script vous-même. C'est pas trop dur je vous ai mâché tout le travail théorique. :dry:
 
▫ Listing
Bon je vais proposer exceptionnellement (à moins que ça va se généraliser) de télécharger le fichier source ici.