█▄▀ Tutorial 1: le personnage contrôlé par les touches du clavier
Le but de ce tutorial est de contrôler un personnage avec les touches du clavier.
 
   Fonctions et variables à connaître
o vk_left : flèche gauche
o vk_right : flèche droite
o vk_up : flèche haut
o vk_down : flèche bas
o keyboard_check(code) : indique si la touche a été enfoncée.
o direction : orientation (0-360, sens trigonométrique, inverse des aiguilles d'une
   montre, 0 = à droite).
o speed : vitesse en pixels par cycle
 
Pour une question d'organisation nous allons créer un script qui contrôle la marche et un script qui contrôle l'arrêt. Comment choisir quel script exécuter ? La réponse est qu'il faut savoir quelles touches sont appuyés, en particulier les touches directionnelles dans ce cas.
Donc nous allons créer un script qui détecte les touches, ce script sera exécuté à chaque cycle, il fait partie de ce qu'on apelle la "gameplay". Ce script détectera toutes les entrées claviers et suivant les touches appuyés il exécutera les scripts qui intéragiront avec le personnages.
En savoir plus: Structure et organisation

Tout d'abord nous allons donc créer un script où l'on détectera si une touche directionnelle est appuyé, puis nous allons créer un script qui contrôle la marche et un script qui contrôle l'arrêt, et comme dans tout jeu il nous faut un script d'initialisation des variables
Les scripts que nous allons créer.

Le script gameplay sera exécuté à chaque cycle, il détecte les touches du clavier qui sont appuyées et appelle les scripts walk ou stop selon les touches appuyées.
 
 
▫ Le script d'initialisation
 
Ce script est à mettre dans l'event "Game Start" de l'objet principal (en l'occurrence le héros)

Alors ce script déclare les variables globales des touches clavier, comme ça si plus tard on veut utiliser le 8 du pavé numérique comme touche vers le haut il suffira de changer la variable global.up dans ce script.
global.up = vk_up;
global.down = vk_down;
global.right = vk_right;
global.left = vk_left;
 
▫ ev_step   Le script de gameplay
 
Ce script est à mettre dans l'event "Step" de l'objet principal Pour détecter si une touche est appuyé on utilise la fonction keyboard_check( ).

Le script Gameplay détecte les touches du clavier et exécute le script représentant le mouvement appelé selon la touche appuyée.

Exemple : Si le joueur a appuyé B (coup d'épée), le script gameplay détecte que cette touche a été appuyé et exécute le script qui contrôle l'épée.

Dans ce tutorial, il s'agit de détecter les touches clavier et de savoir donc s'il faut exécuter le script stop ou le script walk.
Donc on imagine une liste des différent cas possible par ordre de priorité :
- Les touches directionnelles appuyés sont de sens opposé -- script stop
- Une des touches directionnelles est appuyé -- script de walk
- si aucune touches directionnes n'est pas appuyée -- script stop

Dans le cas des touches opposés, il y a contradiction (le personnage ne peut pas aller en même temps à droite et à gauche) donc pour éviter cela nous allons mettre que si cela arrive il ne faudra pas éxécuter le script walk.
/* si (la touche droite est appuyée et la touche gauche est appuyée) ou que (la touche haut appuyée et que la touche bas appuyée)) exécuter le script stop */

if ( keyboard_check(global.right)&&keyboard_check(global.left) )
||( keyboard_check(global.up)&&keyboard_check(global.down) ) stop();


/* sinon (touche droite appuyée ou touche haut appuyée ou touche gauche appuyée ou touche bas appuyée) exécuter le script walk */

else if ( keyboard_check(global.right)||keyboard_check(global.up)||
keyboard_check(global.left)||keyboard_check(global.down) ) walk();
 
▫ res_script   Le script stop
Le script stop n'est pas à mettre dans un event il sera appelé par le script gameplay quand il faudra. Il est très simple, la première ligne remet la variable objet de vitesse à 0.
La seconde ligne, quant à elle, définit une variable qui sera très utile : elle permet de savoir ce que le personnage fait.
speed = 0;
status = "stop";
 
▫ res_script   Le script walk
Ce script est très compliqué, étant donné sa complexité je vous donne une version simplifiée mais il faudra vous attendre à le réécrire plusieurs fois pour pouvoir l'améliorer.
status = "walk";
speed = 8;
image_speed = 1;
Dans la première ligne, on retrouve notre variable qui stocke l'activité actuelle du perso, dans la seconde ligne, on règle la vitesse de l'objet, et dans la troisième on règle la vitesse d'affichage du sprite. (on sait jamais elle peut-être déréglée)
// si (la touche droite est appuyé)
if (keyboard_check(global.right)) {
   // si la direction par défaut est la droite
   direction = 0;
   
   // s'il y a une combinaison de touche la direction est diagonal
      // vers le bas à droite
   if keyboard_check(global.down) direction = 315;
      // vers le haut à droite
   if keyboard_check(global.up) direction = 45;
}
// c'est un peu la même chose réfléchissez un peu !

if keyboard_check(global.up) {
   direction = 90;
   if keyboard_check(global.right) direction = 45;
   if keyboard_check(global.left) direction = 135;
}

if keyboard_check(global.left) {
   direction = 180;
   if keyboard_check(global.up) direction = 135;
   if keyboard_check(global.down) direction = 225;
}

// oh ! il manque lorsqu'on appuie la touche bas ! à vous de l'écrire, c'est un tutorial pas un projet open-source... :@
La variable self.direction détermine la direction que prend l'objet. Sa valeur est calculée selon l'angle que fait la direction par rapport à la droite. Voici un schéma des directions :
La valeur 0 représente la gauche. La valeur 45 en haut à droite. Etc.
 

135          90          45



180     ←           →     0



225         270         335

Dans la deuxième leçon nous verrons comment afficher un sprite qui dépend de la direction
 
▫ Listing
Bon pour les "beginners du premier jour" ou simplement pour comparer ma méthode à la vôtre , vous pouvez télécharger le fichier source ici.
 


Tutorial 2