[RM 2003] Faire une animation de porte réaliste
Salut à tous !
Aujourd'hui j'ai décidé de faire un tutoriel sur l'animation d'une porte quand on rentre ou sort d'une maison. C'est une base à ne pas manquer lorsqu'on créer son jeu vidéo et pourtant beaucoup de gens passent à côté de ça et préfère laisser les portes tel quel sans animation ni quoi que ce soit ou alors peut-être ouverte avec le bruit de mais pourtant on peut aller bien plus loins.
C'est partie donc déjà il vous faut une porte.
Pour ma part j'ai pris ça des ressources Mac and Blue :
Il y as une animation de 4 images mais notez qu'une porte ouverte et fermé est suffisante mais elle auras néanmoins une animation beaucoup plus "violente".
On créer notre évènement "porte" et on le remplis de cette façon :
Cet évènement s'activera au contact du héros et seras au même niveau que lui.
Voici une explication de la programmation :
1. Une variable "[porte] son" serviras pour qu'un son de porte ouverte et fermé retentisse. Cette variable peut avoir 1 pour une porte normal, 2 pour une porte de prison etc... C'est comme vous voulez.
Elle activera un évènement commun et choisiras le son à retentir par rapport à sa valeur qui passeras par une condition mais nous verrons cela un peu plus loin.
2. L'animation de la porte. Ben oui, on à 4 frames alors autant les utiliser pour avoir une animation fluide et pour ça on utilise "déplacer/modifier un évènement" en page 2.
3. On termine en activent l'interrupteur "Porte ouverte" et on ajoute 1 à la variable "[porte] numéro".
• L'interrupteur "porte ouverte" nous serviras quand on sortiras à savoir si la porte s'ouvre ou se ferme. Là on ouvre la porte pour entrer alors cette intérrupteur déclencheras l'animation de la porte lorsqu'elle s'ouvre. Si il est désactivé on verras au contraire la porte se fermer. Ceci nous seras utile lors qu'on devras faire sortir le héros de la maison en question.
• La variable quant à elle nous serviras à n'ouvrir que la maison [x] car en effet, si on avait mis un interrupteur toutes les maisons qui se trouvent à côté aurait eu leurs portes ouvertes en même temps ce qui n'est pas très réaliste !
C'est pourquoi chaque porte auras un numéro bien à elle afin que la page suivante ne s'active que pour cette porte et pas une autre.
Notez que vous pouvez sans hésiter mettre des valeurs déjà utilisée d'une map à l'autre, la valeur doivent être différente seulement sur la même map.
Créons une nouvelle page de l'évènement "porte" comme ceci :
/! N'oubliez surtout pas de mettre en processus parallèle car sinon ça ne s'activera pas ! /!Comme vous le voyez, j'ai mis une condition "si la variable [porte] numéro égal à 1".
D'après mes souvenirs sous XP la condition est bloqué de cette façon : "si la variable [x]
est supérieur ou égal à [y]" et ne peut être changé en "égal".
Certains d'entre vous ne comprendrons peut-être pas le problème alors j'explique rapidement :
Si on met comme condition "supérieur ou égal" à la valeur [porte] numéro, l'évènement s'activera qu'il soit égal à 1, 2, 3 etc... Et donc nous aurons toutes les portes à côté de celle-ci qui s'ouvriront en même temps alors que nous avons créé une variable pour que justement ceci n'arrive pas.
Ce code comprend une condition "si l'interrupteur [porte ouverte] = ON" avec l'option "sinon".
Vous aurez donc compris que dans le cas ou l'interrupteur est ouvert cela téléporterait le héros dans la maison et si au contraire elle est fermée, elle fermeras simplement la porte derrière lui car cela signifiera qu'il sort.
Faites une animation du héros qui fait un pas en avant, mettez un court délais pour que vous ne soyez pas téléporter directement à l'intérieur afin de voir le personnage avancer et ensuite mettez la téléportation à l'endroit désiré.
Pour ma part j'ai mis 2 pas et j'ai téléporté le héros à cet endroit :
En 0.2 secondes le héros n'a pas le temps de finir ses deux pas donc il n'en fait qu'un (d'autant plus que j'ai mis un "attendre un peu" dans "déplacer/modifier un évènement" afin d'être sur que le héros s'arrêtera un petit moment) c'est qu'une fois téléporté qu'il finiras son mouvement et nous aurons donc l'impression qu'il rentre réellement dans la maison.
Notez que j'ai mis le mode fantôme dans "déplacer/modifier un évènement" afin que mon héros ne soit pas bloqué car techniquement à l'endroit ou je l'ai téléporté on ne devrait pas pouvoir marcher.
Le "sinon" ne contient juste l'animation de la porte qui se ferme, rien de bien compliqué.
Voilà donc maintenant qu'on à fait ça, on va s'occuper de l'intérieur !
Pour ressortir il faut cette fois qu'une seule page. J'ai positionné mon évènement à cet endroit au même niveau que le héros de sorte que si le joueur se trompe il peu ressortir aussi vite qu'il est entrée. Si j'avais mis l'évènement un carré plus haut comme on à l'habitude de faire et donc à l'emplacement du héros une fois qu'il est entrée dans la maison, on aurait du alors se déplacer une fois vers le haut puis revenir en bas pour sortir ce qui est assez chiant ! :p
On créer donc notre évènement :
Comme vous le voyez c'est assez répétitif, on ajoute 1 à [porte] numéro et à [porte] son, on déplace le héros vers le bas cette fois pour qu'il sorte puis en 0,2 secondes on le téléporte afin qu'on voit bien le personnage sortir.
Notez qu'il vous faudra là aussi utiliser le mode fantôme.
Pour cet évènement vous auriez même pas eu besoin de moi !
Voilà donc pour notre entrée et notre sortie, maintenant l'évènement commun "porte son" !
En processus parallèle surtout, n'oubliez pas !
Avec une condition on regarde qu'elle son de porte nous allons faire. Pour ma part je n'ai fais qu'une condition mais vous pouvez en faire autant que vous en avez besoin, il suffiras juste de changer la variable [porte] son dans l'évènement de la porte.
Donc comme le son de la porte égal 1, on met le son d'une porte banale qui s'ouvre puis 0.6 sec après qui se ferme.
Pourquoi 0.6 ? Déjà pour que les sons ne se chevauche pas et surtout pour que le son de la porte qui se ferme n'ai pas le temps de se lancer AVANT la téléportation et qui donc se lanceras lorsque nous arriverons à l'intérieur ou l'extérieur ce qui est, vous en conviendrez, mieux.
Il n'est pas inutile de vous dires que ces 0,6 secondes sont calculé par rapport à ma programmation, vous aurez pour quelconque raison plus ou moins de temps et donc il vous faudra, si votre programmation est différente de la mienne, ajuster pour éviter les problèmes.
En fin de condition, il faut impérativement mettre les variables à 0 et désactiver l'interrupteur sans quoi TOUT le code est foutu ! Les sons et l'évènement de la téléportation ne s'arrêteront plus, ce seras le CHAOS ET LA ZIZANI... Et puis c'est d'ailleurs en désactivent l'interrupteur que la porte pourras se fermer une fois qu'on sortiras d'une pièce car comme il se désactive quand on rentre et qu'on le réactive pas dans l'évènement de la porte de la maison, forcément quand on sortiras la page 2 de la porte auras la valeur 1 pour le numéro de la porte (vu que le son de l'évènement commun n'as pas finis son boulot) mais n'auras pas l'interrupteur de l'animation pour l'ouvrir et donc ce seras l'animation de la fermeture qui se feras.
Dit comme ça et pour les plus débutants d'entre vous ça peu paraitre compliqué mais c'est de la pure logique et si vous pataugez un peu c'est simplement parce que vous ne savez plus trop ou vas quoi pourtant vous avez toutes les pièces du puzzle en main.
Voilà, ce tuto touche à sa fin.
Je m'excuse pour les éventuelles fautes, je fais attention et j'ai conscience que c'est d'autant plus désagréable quand on lit un tutoriel mais bon je lis le Bescherelle seulement ça me soul un peu, super livre hein mais je préfère attendre le film. :p
Si vous avez des questions n'hésitez pas.
Caio et à bientôt pour un prochain tutoriel !