[RM] Réaliser un boomerang (RPG Fusion)

Démarré par RPG Fusion, 24 Mars 2014 à 10:38

0 Membres et 1 Invité sur ce sujet

Salut à tous !
Voici mon tout premier tutoriel assez complexe mais qui pourra vous etre utile.
Ce tuto, c´est donc le système du boomerang mais si vous comprenez le système, vous pourrez facilement faire celui de la bombe et celui de l´arc.
Sur ce, commençons.

Nous allons organiser notre système en 1 seul évènement qui lui, sera composé de 2 pages.
Tout au long de ce tutoriels, je vais principalement vous expliquer les commandes puis je vous donnerez des morceaux de codes.
Ca sera à vous de recomposer le système. Mais il n´y aura rien de compliqué pour ça.

Déjà, on peut commencer par dire que la première page va nous servir à la détection de la touche pour utiliser le boomerang.
Donc, dans cette page, on va demander l´appui d´une touche, faire une condition pour savoir si le joueur appui sur la touche demandé et enfin, on va activer un interrupteur qui va nous servir pour la deuxième page.
Voici le code de la page :

<>Demander l´appui d´une touche [05: Touche boomerang]
<>Si variable [05: Touche boomerang] =, 11
//Dans ce tuto, la touche du boomerang est la touche numérique "1"
<>Interrupteur [01: Boomerang Use] sur ON


Ceci conclut la première page de notre évènement. Il va par la logique que cet page doit etre en processus parallèle, sous le héros et sans apparence.

Bon, nous allons nous attaquer à la deuxième page.
C´est là que notre système devient complexe. Alors soyez attentif et lisez bien ce qui va suivre.
Voici ce que nous allons faire tout au long de cette page :
Nous allons d´abord attribuer 2 variables "Héros X" et "HérosY" qui seront égales aux coordonnées X et Y du héros.

<>Variable [01: Héros X] =, Héros coord. X
<>Variable [02: Héros Y] =, Héros coord. Y


Ensuite, on met une autre variable qui calcule la direction du héros

<>Variable [06: Direction Héros] =, Héros Direction

On active la transparence du héros, on le fais attendre de tel à ce qu´il ne bouge pas pendant qu´il lance le boomerang et selon sa direction, on affiche l´animation du lancé de boomerang.
Voici ce que ça va nous donner :

<>Transparence du héros: Activée
<>Déplacer/Modifier: Héros, Attend un peu
<>Si variable [06: Direction héros] 8
<>Variable [02: Héros Y] -, 1
<>Afficher une animation: Boomerang Haut
<>Déplacer/Modifier: Héros, Regarde en haut
<>
: Sinon
<>
Fin
<>Si variable [06: Direction héros] 6
<>Variable [01: Héros X] +, 1
<>Afficher une animation: Boomerang Droite
<>Déplacer/Modifier: Héros, Regarde à droite
<>
: Sinon
<>
Fin
<>Si variable [06: Direction héros] 2
<>Variable [02: Héros Y] +, 1
<>Afficher une animation: Boomerang Bas
<>Dépacer/Modifier: Héros, Regarde en bas
<>
: Sinon
<>
Fin
<>Si variable [06: Direction héros] 4
<>Variable [01: Héros X] -, 1
<>Afficher une animation: Boomerang Gauche
<>Déplacer/Modifier: Héros, Regarde à gauche


Voilà... enfin, c´est loin d´etre terminé hein ^^
Donc, une fois ceci fait, on va attendre 0.3 secondes car c´est le temps de l´animation, puis on va déplacer le héros de 0 case ^^ En fait, comme on l´avait fait attendre le temps qu´il lance le boomerang, on doit le mettre une commande "Déplacer: héros" sans faire de déplacement. Et celà va restaurer les mouvements de Link :

<>Attendre 0.3 Sec.
<>Déplacer/Modifier: Héros
<>Transparence du héros: Désactivée


Maintenant, on modifie la position de cet évènement, soit le boomerang afin que son déplacement commence à partir du héros.
Donc il suffit simplement de modifier la position de l´évènement à partir des coordonnées actuelle du héros. (En gros, sur le héros)
Et on place une étiquette en office de boucle. Comme ça, dès que ça nous arrangera, on retournera à l´étiquette :

<>Déplacer pos.évènement:Cet évènement, X[01], Y[02] // "Héros X" et "Héros Y"
<>Etiquette 2

On va mettre une condition pour savoir si le boomerang doit revenir ou pas. Donc à cet endroit de notre évènement, on commence seulement le déplacement. Ce qui nous amène à OFF :

<>Si Interrupteur[02: Boomerang revient] sur OFF


Donc là, le boomerang commence son déplacement, et on fait 1 pas en avant afin que le boomerang parcours le trajet dans la direction voulut.
Puis, on ajoute une nouvelle variable qui va gérer la distance. Donc juste après le pas en avant, on ajoute 1 à la variable distance ce qui va signifier que lorsque le boomerang fait un pas en avant, on ajoute 1 à la variable distance.
Et là, il est important de mettre trois fois 0.0 Sec. !
Pourquoi ? Alors ça, j´en sais trop rien. Mon système à été corrigé mais dans le système corrigé, il fallait 3 fois 0.0 Sec. sinon le boomerang est très lents lors de son déplacement.
Depuis les explications précédentes, notre code donne ça :

<>Variable[07: Distance] +, 1
<>Attendre 0.0 Sec
<>Attendre 0.0 Sec
<>Attendre 0.0 Sec


Aller, courage, c´est bientot terminé

Nous allons attribuer 2 variables "Boomerang X" et "Boomerang Y" que l´on va rendre égales aux coordonnées de cet évènement.
Puis on va stocker l´ID du boomerang pour gérer les collisions.
Suite à quoi, vous irez dans la Base de Donnée, onglet "Terrains" et vous allez faire un terrain spécialement pour les collisions.
Nous retournerons dans notre évènement, et nous allons faire une condition avec la vairble ID Boomerang pour savoir si on est dans une collision ou non :

<>Variable: [03: Boomerang X] =, Cet évènement coord. X
<>Variable: [04: Boomerang Y] =, Cet évènement coord. Y
<>Stocker l´ID d´un terrain : X[03: Boomeran X] Y[04: Boomerang Y], dans la variable [08: ID Boomerang]
//Si le terrain est égal à 2, alors il y a collision
<>Si variable [08: ID Boomerang] 2
//On active un interrupteur pour que le boomerang revienne
<>Interrupteur[02: Boomerang Revient] activés
//Le boomerang doit revenir donc on revient à l´étiquette 2
<>Aller à l´étiquette 2
<>
: Sinon


Donc là, nous allons calculer la distance que parcours le boomerang. Une fois 6 carreaux parcourut, on fait revenir le boomerang (Par l´étiquette 2 encore une fois)
Bon, encore un autre problème qui provient notamment des 3 fois Attendre 0.0 Sec, on doit mettre le double de la distance sinon, ça fait deux fois moins. Vous suivez ?
Si non, alors tout simplement, vous choisissez le nombre de carreaux que vous voulez que votre boomerang parcours et vous le multipliez par 2.
En gros, moi je veux 6 carreaux, donc je dois mettre la condition à 12 :

<>Si variable[08: Distance] 12
<>Interrupteur: [02: Boomerang revient] Activé
<>Aller à l´étiquette 2
<>
: Sinon
//Sinon, on retourne aussi à l´étiquette 2
<>Aller à l´étiquette 2
<>
Fin
<>
Fin
<>
: Sinon
//Voici maintenant l´étiquette 3


L´étiquette 3 nous sert de retour au boomerang.
Donc nous allons déplacer cet évènement "Un pas vers le héros" le tout en mode fantome pour que le boomerang ne soit pas géné des collisions.
On attend ensuite deux fois 0.0 Sec et on remet à jour les coordonnées X et Y du héros et pareil pour celles du boomerang.
Ensuite, on fait une condition, si les coordonnées du héros sont égales aux coordonnées du bommerang, alors on fait disparaitre cet évènement en le téléportant au carreau 000,000), on remet la variable distance à 0 et on désactive les interrupteurs qui étaient activés :

<>Etiquette 3
<>Déplacer/Modifier: Cet évènement, Mode fantome ON, Pas vers le héros,
<>Attendre 0.0 Sec
<>Attendre 0.0 Sec
<>Variable: [03:Boomerang X] =, Cet évènement coord. X
<>Variable: [04:Boomerang Y] =, Cet évènement coord. Y
<>Variable: [01:Héros X] =, Héros coord. X
<>Variable: [02:Héros Y] =, Héros coord. Y
<>Si variable [01: Héros X] V[03: Boomerang X] =
<>Si variable [02: Héros Y] V[04: Boomerang Y] =
<>Modifier pos.évènement: Cet évènement, (000.000)
<>Variable[08: Distance] =, 0
//On désactive tout les interrupteurs activé
<>Interrupteur[02: Boomerang Revient] Désactivé
<>Interrupteur[01: Boomerang Use] Désacitvé
<>
:Sinon
<>Aller à l´étiquette 3
<>
: Sinon
<>
Fin
: Sinon
<>
Fin


Voilà, ce long et interminable évènement est terminé.
Pour rappel, cet évènement devait etre en processus parallèle, au meme niveau que le héros avec l´apperence du boomerang, et faite tourner cet évènement sur lui meme aussi.
Ca animera son déplacement.

Et c´est aussi la fin de ce tutoriel.
Je remercie grandement OddClock qui a corrigé le système qui l´a aussi un peu amélioré.
Merci à lui et à vous. A très bientot pour un prochain tutoriel !