❤ 0 Ce tutoriel est utilisable pour tous les RPG maker !! (2000, 2003, XP, VX)
Le mini-jeu de base par excellence !
Tu te déplace continuellement dans une direction et tu dois esquiver les obstacles du décore qui viennent vers toi.
Il y a mille façon de programmer ce genre de mini jeu !
Mais je pense que celle-ci est la plus simple, utile et instructive !
Je vais vous expliquer pour le cas ou votre personnage se déplace vers le haut, et doit se déplacer de gauche à droite pour éviter les obstacles.
Si vous avez bien compris ce tutoriel, essayez donc de faire que le personnage se déplace plutôt continuellement vers la droite et doit esquiver les obstacles par haut et bas.
Tout d'abord, examinons ce que l'on souhaite faire !
-Le héros se déplace tout le temps vers le haut
-Quand on appuie sur haut et bas, il ne se passe rien
-Quand on appuie sur gauche, il va se déplacer sur la gauche, mais comme il se déplace en même temps vers le haut, il va se déplacer en diagonal haut/gauche
-Quand on appuie sur droite, il va alors se déplacer en diagonal haut/droite
Mais quand on déplace notre héros, d'habitude, il bouge que lorsqu'on appuie sur les touche, et dans les quatre directions, pas de cette façon là !?
Alors il faut bloquer le contrôle du héros et programmer une nouvelle façon de le contrôler, non ?
Comment faire ?? Vous savez comment faire, bien sûr !^^
...Non ?
Ce qui bloque le contrôle du héros, c'est un événement en mode "Automatique", contrairement au processus parallèle qui lui ne bloque pas le contrôle du héros.
Alors on va créer un premier événement "Contrôle" en mode auto... Ah non, parallèle !
PoUrQuOi ???!!!
Ben on aurait un bug de RPGmaker sinon, tel que je vais vous le programmer !
On a deux besoin que de deux événements pour ce mini-jeu, un pour le contrôle du héros, le second pour les collisions et la ligne d'arrivée, et RPGmaker est très méchant, on est obligé, si on fait une téléportation, que la téléportation soit à l'intérieur de l'événement en mode automatique !
Et là, la téléportation ne sera pas dans le premier événement "contrôle" mais dans l'autre événement "collision".
Donc on aura l'événement "contrôle" en processus parallèle
Et l'événement "collision" en mode automatique !
Processus parallèle, automatique ? Tu pige pas ?
Oh mince !! Un gros débutant est en train de me lire !!
Ben quand tu créé un événement, tu peux choisir à côté de son apparence, la "condition de déclenchement", et là tu peux choisir entre "presser une touche, au contact du héros, contact événement/héros, démarrage automatique et processus parallèle" ! Ah ben tu vois que t'es pas un gros débutant !
Alors je répète, on a le premier événement "contrôle" en processus parallèle qui permet de diriger notre héros comme on l'a décrit, puis le second événement "collision" qui servira à savoir si le héros s'est mangé un mur, ou s'il arrive sur la ligne d'arrivée ! Je vous explique ça plus tard on commence d'abord par ce premier événement...
Le parcours
Le héros se déplace vers le haut, vous allez mapper votre long parcours sur une carte bien longue en hauteur (exemple : 25x200)
Faite les obstacles que vous voulez ! Pour l'instant ne vous cassez pas la tête, deux trois obstacles le temps vous programmiez le système !
Une fois que vous aurez fini votre programmation, veillez à ce que votre parcours soit franchissable Pas de déviations en coude mais en diagonal !
L'événement "Contrôle"
Est transparent, en mode processus parallèle, et vous l'appellez "Contrôle"
A l'intérieur on va programmer en sorte que le héros se déplace tout le temps vers le haut, et qu'on peut se déplacer en diagonal haut/gauche et diagonal haut/droite avec les touches gauches et droites.
On commence : se déplacer continuellement vers le haut :
déplacer modifier événement : "héros" pas vers le haut
>>>"ignorer si impossible" coché, "Répéter commande" décoché"
Attendre 0.1sec
OUAH TROP BALEZE T'ES UN DIEU DE LA PROGRAMMATION, JOKE !!!
Ha ha, je sais, je suis si puissant ! Quelle idée ingénieuse !
...faire "déplacer héros" "pas vers le haut" !
Ben ouais jusque là c'est pas compliqué, comme c'est un événement en processus parallèle, ce qu'il y a de programmé à l'intérieur va tourner en boucle, donc pas besoin de cocher "répéter commande" dans la commande, car cette commande va se répéter toute les 0.1secondes !
On ajoute : Se déplacer sur la gauche et sur la droite !
déplacer modifier événement : "héros" pas vers le haut
>>>"ignorer si impossible" coché, "Répéter commande" décoché"
demander l'appui d'une touche : variable "touche"
>>> tu choisis une variable que tu auras nommé "touche", tu coche : Touche gauche (2) et Touche droite (3) et tu décoche "attendre jusqu'à ce qu'une touche soit pressée"(important !!)
condition : si variable "touche" est égal à 2 :
<>Déplacer modifier événement : "héros" : "pas vers haut/gauche","pas vers haut","pas vers gauche"
>>> "ignorer si impossible" coché, "répéter commande" décoché
condition : si variable "touche" est égal à 3 :
<>Déplacer modifier événement : "héros" : "pas vers haut/droite","pas vers haut","pas vers droite"
>>> "ignorer si impossible" coché, "répéter commande" décoché
Attendre 0.1sec
L'événement "collision" est terminé !
Déjà ??
Tu veux programmer quoi de plus ? C'est parfait comme ça !^^
Quoi ? Pourquoi j'ai fais "haut/gauche","haut" puis "gauche" au lieu de simplement "haut/gauche" ?
Hé oui c'est intelligent, je vais m'expliquer :
Chaque déplacements ont "ignorer si impossible" de coché, donc si on appuie sur la gauche, il y a un déplacement donc le tout premier déplacement "déplacer vers le haut" est annulé par cet autre déplacement.
Cet autre déplacement (pour la touche gauche) c'est "haut/gauche","haut","gauche".
Ca veut dire que si c'est impossible de se diriger vers "haut/gauche" (dans le cas ou tu appuie sur la gauche alors que ton héros est bloqué contre un mur à sa gauche, il pourrait pas) alors "haut/gauche" serait annulé et prendrait place à "haut", et si "haut" est bloqué (genre tu es contre un mur qui est devant toi, haut/gauche est impossible, haut est impossible) tu pourras alors te déplacer sur la gauche.
Tu n'auras pas le temps de te déplacer sur la gauche car tu te seras mangé le mur, mais qui sait, grâce à ça tu esquivera le mur vraiment de justesse !
Si on n'avait mis que "déplacer : haut/gauche", et qu'on se déplacerait contre un mur, le héros se serait arrêté ! Pas bon ! Donc là c'est parfait.
Pourquoi, quand tu as aucun obstacle sur ta gauche, ça fait pas un déplacement chelou "haut/gauche, haut, gauche" mais ton perso se déplace bien continuellement vers haut/gauche" ? Toujours grace à la case "ignorer si impossible", quand on laisse appuyé gauche, ça te fait le déplacement "haut/gauche, haut, gauche" tout les 0.1 secondes ! donc à chaque fois il s'annule lui même et seul le premier déplacement est pris en compte !
Tant de blabla pour trois lignes de programmation ! Mais au moins vous avez pigé, et OH MY GODE, le déplacement est fluide et perfect^^
L'événement "Collision"
Est transparent, en mode automatique, et vous l'appellez "Contrôle"
Ouiii ! Pour que le héros se mange les murs je vais devoir tapisser plein d'événement en mode "sous le héros" "contact événement/héros" avec le game-over dedans !!!!!
OUH LE NULEUUH !! Il sépoprogramméé !
Non surtout pas de tapissage, pas d'événement en mode "touché par le héros", de toute façon, ça ne marcherait même pas !
Pourquoi ? Parce que ces événements se déclenchent si tu te déplace toi-même dessus, mais si c'est un autre événement qui va te faire déplacer dessus, pas tes touches directionnelles, ça ne marche pas !
Hé hé c'est là que la programmation est intelligente, ce petit événement en mode automatique vous permettra de détecter à chaque fois que le héros est bloqué contre quelque chose !
Déjà je vous rappelle pourquoi il est en mode automatique : Le mode automatique bloque les déplacements du héros, donc c'est important de bloquer les déplacements normaux pour que l'événement "contrôle" fonctionne correctement.
Pour commencer, on réfléchis !
Quelle idée !! Il faut réfléchir pour programmer un truc ? Ah ouais pas mal !!
Si le héros rencontre un obstacle, que va-t-il se passer ?
> CRASHBOUMBLAAAAM Game Over.
Euh oui... mais avant ça, avant ça !
Tu sèche ? Cherche c'est quoi la différence entre lorsque le héros se mange pas d'obstacle, et quand il s'en mange un..
...Ben s'il se mange un obstacle, il se déplace plus !! Tu vois que t'es pas con !
Alors il faudrait programmer quelque chose qui capte quand est-ce que le héros ne se déplace plus !
Il se déplace vers le haut, qu'est ce qui change quand il se déplace qui ne change plus lorsqu'il ne se déplace plus ?
Sa position ? Ha ha ha t'as rien d'autre à me dire ?
Bien sûr que t'as rien d'autre à me dire ! C'est bien ça : la position verticale va changer si le héros se déplace, s'il ne se déplace plus elle ne changera plus.
Peut on avoir la position verticale du héros dans RPGmaker ?
Ben ouais, c'est sa position Y, on peut la stocker dans une variable !
On peut donc faire "modifier variable "Y héros"" rendre égal à événement : coordonnée Y du héros.
Tu as coordonnée Y et Y écran, tiens, pourquoi on utilise pas Y écran ??
Y écran c'est la position du héros sur l'écran, et tu remarquera que pendant la course, ton perso sera toujours au milieu de l'écran ! Donc la coordonnée Y écran elle en changera pas, c'est pas utile de l'utiliser, on utilise alors la coordonnée Y normale qui est la position verticale du héros par rapport à la carte !
On sait comment prendre la coordonnée Y du héros, mais comment fait-on pour savoir si elle arrête de changer, ou si elle continue de changer ?
Ben 0.2 secondes c'est pas suffisant au héros pour changer de position en pleine course ? S'il se déplace rapidement même 0.1 seconde c'est suffisant, que la position Y change normalement toute les 0.1 secondes !
Donc si le héros ne se déplace plus, sa position Y a cessé de changer toute les 0.2 seconde ! Donc avant 0.2 sec la variable devient pareil qu'après 0.2 sec !
Il faut donc un témoin qui se souvienne de combien valait la variable "Héros Y" avant que s'écoule 0.2secondes, on va donc utiliser une deuxième variable : "Héros Y ancien"
Aaah, vous commencez à cerner l'idée, je vois cette petite lueur de malice dans vos yeux, oui c'est tout simple hein ?
Voilà le code ! :
Modifier variable : "Héros Y ancien" rendre égal à événement : position Y du héros
Attendre 0.2sec
Modifier variable : "Héros Y" rendre égal à événement : position Y du héros
Condition : si variable "Héros Y" est égal à variable "Héros Y ancien"
<>KRASHBOUBADABOUM, téléporter l'équipe : début de la course !
Hé bé, tout ce blabla pour un si petit code !!
Je vous l'avez dis, c'est la manière la plus simple de programmer un tel mini jeu ! T'as pas plus propre !!
La condition sert à savoir si la position Y est resté la même ou pas pendant ces 0.2sec, si elle est restée la même, c'est que le héros est bloqué, c'est qu'il a rencontré un obstacle, c'est que... KRASHBOUBADABOUM !!
Voilà tu as programmé le contrôle du héros, les collisions du héros... c'est génial et magique !!
...Il manquerait pas un petit quelque chose ?
Une fin à cette course, peut-être ? ^^"
Laisse faire le dieu !! Je vais faire une ligne d'événements en mode "contact événement/héros" avec ce qu'il faut dedans !!!! Hi Hi !!
Non mais il est pas bien, lui ! Avec sa mémoire de poisson rouge !!
J'ai dis que ces événements ne marchaient pas !!
Comment faire alors ?
Tu vois où tu as placé ta ligne d'arrivée ? Mets ton curseur dessus, dans RPGmaker !
Dans la barre grise en bas de RPGmaker tu as le nom de la carte, et deux nombres entre parenthèses ! C'est la position X et Y de l'endroit où tu as mis ton curseur, sur ta carte.
Tu peux alors lire la position Y, deuxième nombre, de ta ligne d'arrivée.
Par exemple tu lis "005" ? Parfait ! On va ajouter ça dans notre événement "collision" alors ! Ben ouais, pas la peine de créer un troisième événement, gros naze, surtout que s'il y a téléportation, il faut la faire dans l'événement automatique sinon BUG, plantage !
Modifier variable : "Héros Y ancien" rendre égal à événement : position Y du héros
Attendre 0.2sec
Modifier variable : "Héros Y" rendre égal à événement : position Y du héros
Condition : si variable "Héros Y" est égal à variable "Héros Y ancien"
<>activer interrupteur "crash"
<>KRASHBOUBADABOUM
<>téléporter l'équipe : début de la course
Condition : si variable "Héros Y" est inférieur ou égal à "5"
<>YOU WIN, bravo poulet !!!
<>téléporter l'équipe : Fin de la course
Ben voilà, si la position Y du héros devient inférieure ou égale à 5, c'est que le héros touche ou dépasse la ligne d'arrivée ! =)
J'ai ajouté "activer interrupteur : "crash"" dans la condition de collision ! Pourquoi donc ?
Quand tu te crash, l'événement de déplacement fonctionne toujours ! Alors pendant le crash, tu peux toujours déplacer ton héros et continuer la course si tu n'active pas cet interrupteur !
Alors dans le premier événement "contrôle", vous allez ajouter une seconde page vierge, en mode "appui touche" avec comme condition de déclenchement en haut à gauche de l'événement : l'interrupteur "crash"
Cela aura pour effet de désactiver le contrôle du héros pendant le crash !
Attention : Du coup, lorsque vous commencez la course, il faut que cet interrupteur soit désactivé, désactivez le au commencement de la course !
En plus ça vous permet de faire une intro à votre course genre "activer interrupteur "crash""
"3,2,1, partez"
"Désactiver interrupteur "crash"
Vous pouvez même le mettre dans votre événement "collision", ça, suivit d'une boucle pour ne pas que ça se répète, cet intro !
RÉCAPITULATIF :
Quelques changements ont été apportés pour justement intégrer cet intro. On oublie l'interrupteur "crash" et on utilise plutôt l'interrupteur "course activee" :
Premier événement "Contrôle" :
En mode processus parallèle, interrupteur déclencheur : "course activee", bien plus pratique !
déplacer modifier événement : "héros" pas vers le haut
>>>"ignorer si impossible" coché, "Répéter commande" décoché"
demander l'appui d'une touche : variable "touche"
>>> tu choisis une variable que tu auras nommé "touche", tu coche : Touche gauche (2) et Touche droite (3) et tu décoche "attendre jusqu'à ce qu'une touche soit pressée"(important !!)
condition : si variable "touche" est égal à 2 :
<>Déplacer modifier événement : "héros" : "pas vers haut/gauche","pas vers haut","pas vers gauche"
>>> "ignorer si impossible" coché, "répéter commande" décoché
condition : si variable "touche" est égal à 3 :
<>Déplacer modifier événement : "héros" : "pas vers haut/droite","pas vers haut","pas vers droite"
>>> "ignorer si impossible" coché, "répéter commande" décoché
Attendre 0.1sec
Second événement "Collision" :
En mode automatique, aucun interrupteur déclencheur :
message : Attention, soyez prêt pour la course d'obstacles !
message : 3..
message : 2..
message : Pouet...
message : PARTOOOOCHE !!!!
activer interrupteur : "course activee"
BOUCLE :
Modifier variable : "Héros Y ancien" rendre égal à événement : position Y du héros
Attendre 0.2sec
Modifier variable : "Héros Y" rendre égal à événement : position Y du héros
Condition : si variable "Héros Y" est égal à variable "Héros Y ancien"
<>désactiver interrupteur "course activee"
<>effet sonore : "explode1"
<>déplacer/modifier événement : héros : commencer saut, terminer saut
<>afficher animation de combat : héros : "explosion"
<>message : KRASHBOUBADABOUM
<>téléporter l'équipe : début de la course
Condition : si variable "Héros Y" est inférieur ou égal à "5"
<>jouer musique : victoire
<>message : YOU WIN, bravo poulet !!!
<>téléporter l'équipe : Fin de la course
FIN DE BOUCLE
Voilà, maintenant à vous d'améliorer cette base très efficace !
Tous ce qui peut bloquer le héros sur votre map fera un crash^^
Si vous comprenez vraiment bien cette astuce, essayez de refaire la même chose mais vers la droite au lieu de vers le haut !
Si vous êtes malins vous pouvez programmer du saut d'obstacle ! (genre pendant qu'on saute, un interrupteur s'active et tous les obstacles sautable deviennent passable grâce à une seconde page avec cet interrupteur comme déclencheur ! A la fin du saut, l'interrupteur serait à nouveau désactivé)
Bilou !
|