Salut!
Bon, je me suis penché un peu sur ton cas, j'ai réussi à faire quelque chose qui sonne pas trop mal au final selon moi...
C'est plus ou moins complexe, ça dépend assez de ton niveau que je ne connais pas ^^'
Si tu as la flemme de lire, voilà la démo: Evènement tournant. Toutefois, je te conseille de lire au lieu de partir à l'aveuglette dedans ^^'
Tout d'abord... créons notre évent qui fera ses tours =° Il devra dire son texte quand on lui parlera, il faut donc qu'il soit en mode de déclenchement: Touche Action...
Sur toutes les pages de l'évènement, il devra avoir l'apparence que tu lui as définie...
Evènement, page 1:
@> Commentaire: Dans déplacement, tu définis le déplacement à effectuer... Pour moi, c'est un tour tout simple qu'il doit faire...
@> Commentaire: Tu choisis le chemin à effectuer dans la partie Déplacement, à gauche de l'évènement...
@> Commentaire: Libre à toi de modifier la fréquence et la vitesse de déplacement de cet évènement...
@> Message: Texte à dire durant une interpellation de l'évènement par le héros lorsque cet évènement fait ses tours...
@>
Voici mon tour tout bête que j'ai défini...
La deuxième page servira à déplacer l'évènement quand celui-ci aura fait son nombre de tours que tu auras défini dans un autre évènement...
Evènement, page 2, Processus Parallèle, Condition de Déclenchement: Interrupteur local A activé:
@> Commentaire: Encore une fois, tu peux modifier la vitesse et la fréquence de déplacement, je conseille la même que celle de la page précédente...
@> Commentaire: Toutefois, le déplacement est ici défini DANS l'évènement et non dans la partie Déplacement...
@> Déplacer évènement : Cet évènement (Attendre la fin)
: Déplacer évènementni : @> Un pas vers la gauche
: Déplacer évènementni : @> Un pas vers la gauche
: Déplacer évènementni : @> Regarde en bas
@> Opération: Interrupteur local B = Activé
@>
Enfin, quand l'évènement a fini tous ses tours et qu'il est bien placé, on peut lui faire dire son nouveau texte
Déclenchement par la touche action à nouveau cette fois
Evènement, page 3, Condition de Déclenchement: Interrupteur local B activé:
@>
Commentaire: Cette fois l'évènement ne bouge pas @> Message:
Texte à dire durant une interpellation de l'évènement par le héros lorsque cet évènement est placé et immobile @>
C'en est fini pour cet évènement
Au final, mon évènement fera ces mouvements là:
Lorsqu'il tourneLorsqu'il fait son dernier tour Remarque importante quand même: Si le héros s'interpose sur la trajectoire de l'évènement, cela ne la modifie pas
Il continue bien sa trajectoire comme prévu ^^
On en arrive à la partie plus technique... tout d'abord, il nous faut définir un point à partir du quel l'évènement devra partir (donc quand il a fini tous ses tours...)
On voit sur l'image montrée précédemment:
que c'est à partir de la case en haut à gauche de mon tour que la trajectoire est modifiée, il faut regarder les coordonnées de cette case, nous en aurons besoin pour la suite de l'évènement, pour ma part, elle se situe en [7,5]... Pour l'avoir, il suffit de sélectionner la case et de regarder sa position en bas à droite du logiciel
Passons donc à l'évènement complexe <3
Il s'agit d'un évènement en processus parallèle qui vérifiera sans cesse la position de l'évènement par rapport à la case que l'on a choisi pour la fin du tour
Voyons donc à quoi ça ressemble, n'hésite pas à lire les commentaires, ça peut être utile ^^' Toutefois, si tu veux t'en passer, une version sans les commentaires est mise plus bas ^^'
Evènement, page 1, Processus parallèle, Sans apparence:
@>
Commentaire: Tout d'abord, nous devons enregistrer les coordonnées de notre évènement dans des variables, chez moi, il s'agit de l'évènement n°1...@>
Opération: Variable [0001: Coordonnée X] = [EV001] : Coordonnée X@>
Opération: Variable [0002: Coordonnée Y] = [EV001] : Coordonnée Y@>
Commentaire: Maintenant, nous vérifions si l'évènement se situe sur la case de fin de tour, et combien de tours il a déjà effectué @>
Commentaire: C'est donc ici que nous avons besoin des coordonnées que nous avons trouvées, pour moi, il s'agissait de [7,5], soit 7 en X et 5 en Y...@>
Condition: Si Variable [0001: Coordonnée X] == 7nnn@>
Condition: Si Variable [0002: Coordonnée Y] == 5nnnnnn@>
Condition: Si Variable [0003: Tours] < 4nnnnnnnnn@>
Commentaire: S'il n'a pas fait le nombre de tours choisis, alors on rajoute 1 à la variable qui compte les tours nnnnnnnnn@>
Commentaire: Tu peux modifier le nombre de tours à faire en modifiant la valeur de la condition nnnnnnnnn@>
Opération: Variable [0003: Tours] += 1nnnnnnnnn@>
Commentaire: Petite complexité néanmoins utile, elle permet d'attendre que le personnage se soit déplacer avant de réincrémenter la variable Tours...nnnnnnnnn@>
Commentaire: Sans cette boucle, l'évènement ne ferait qu'un seul tour...nnnnnnnnn@>
Commentaire: Car l'ordinateur exécute cet évènement à une vitesse telle que la variable aurait le temps de s'incrémenter je ne sais combien de fois Oonnnnnnnnn@>
Commentaire: (une fois par frame en fait je crois...)nnnnnnnnn@>
Bouclennnnnnnnnnnn@>
Ici, la variable à actualiser et à vérifier varie selon le mouvement qui suit cette case, plus d'explications à la fin du tuto nnnnnnnnnnnn@>
Opération: Variable [0002: Coordonnée Y] = [EV001] : Coordonnée Ynnnnnnnnnnnn@>
Condition: Si Variable [0002: Coordonnée Y] != 5nnnnnnnnnnnnnnn@>
Sortir de la bouclennnnnnnnnnnnnnn@>
nnnnnnnnnnnn : Sinonnnnnnnnnnnnnnnn@>
Commentaire: Sans cette attente, le jeu se bloquerait, car on lui demande de vérifier sans arrêt la position sans interruption...nnnnnnnnnnnnnnn@>
Attendre : 1 Frame(s)nnnnnnnnnnnnnnn@>
nnnnnnnnnnnn : Fin de la conditionnnnnnnnnnnnn@>
nnnnnnnnn : Fin de la bouclennnnnnnnn@>
nnnnnn : Sinonnnnnnnnnn@>
Commentaire: Une fois tous les tours effectués, on active donc l'interrupteur local de l'évènement tourneur, et de celui-ci qui n'a plus besoin de vérifier quoi que ce soit ^^nnnnnnnnn@>
Commentaire: Pour se faire, on active l'interrupteur local de l'autre évènement via un appel de script (merci Sihn )nnnnnnnnn@>
Commentaire: Dans le code suivant, remplace le "1" par l'ID de l'évènement qui doit tourner nnnnnnnnn@>
Appeler script: $game_self_switches[[$game_map.map_id, 1, "A"]] = truennnnnnnnn@>
Opération: Interrupteur local A = Activénnnnnnnnn@>
nnnnnn : Fin de la conditionnnnnnn@>
nnn : Fin de la conditionnnn@>
: Fin de la condition@>
Voici donc la version sans commentaires, si tu arrives à comprendre par toi même ce que je veux faire
Evènement, page 2, Processus parallèle, Sans apparence:
@> Opération: Variable [0001: Coordonnée X] = [EV001] : Coordonnée X
@> Opération: Variable [0002: Coordonnée Y] = [EV001] : Coordonnée Y
@> Condition: Si Variable [0001: Coordonnée X] == 7
nnn@> Condition: Si Variable [0002: Coordonnée Y] == 5
nnnnnn@> Condition: Si Variable [0003: Tours] < 4
nnnnnnnnn@> Opération: Variable [0003: Tours] += 1
nnnnnnnnn@> Boucle
nnnnnnnnnnnn@> Opération: Variable [0002: Coordonnée Y] = [EV001] : Coordonnée Y
nnnnnnnnnnnn@> Condition: Si Variable [0002: Coordonnée Y] != 5
nnnnnnnnnnnnnnn@> Sortir de la boucle
nnnnnnnnnnnnnnn@>
nnnnnnnnnnnn : Sinon
nnnnnnnnnnnnnnn@> Attendre : 1 Frame(s)
nnnnnnnnnnnnnnn@>
nnnnnnnnnnnn : Fin de la condition
nnnnnnnnnnnn@>
nnnnnnnnn : Fin de la boucle
nnnnnnnnn@>
nnnnnn : Sinon
nnnnnnnnn@> Appeler script: $game_self_switches[[$game_map.map_id, 1, "A"]] = true
nnnnnnnnn@>Opération: Interrupteur local A = Activé
nnnnnnnnn@>
nnnnnn : Fin de la condition
nnnnnn@>
nnn : Fin de la condition
nnn@>
: Fin de la condition
@>
Enfin, on lui crée une seconde page, vide, qui sert uniquement à faire en sorte que le jeu ne fasse pas toutes ces vérifications inutilement lorsque l'évènement aura fini tous ses tours et sera donc immobile
Evènement, page 3, Condition de Déclenchement: Interrupteur local A activé:
@>
Hey hey hey! Ça y est! Notre évènement est terminé
Il fait bien ses tours comme prévu, on peut lui parler pendant ses tours et après ses tours, varier le texte selon qu'il soit en train de tourner ou pas, enfin, je crois que le cahier des charges est respecté ^^'
Si tu as des questions, n'hésite pas à les poser
Et cette boucle alors?Ah, oui, revenons sur la petite boucle que j'ai fait dans le dernier évènement
Evènement:
nnnnnnnnn@> Boucle
nnnnnnnnnnnn@> Opération: Variable [0002: Coordonnée Y] = [EV001] : Coordonnée Y
nnnnnnnnnnnn@> Condition: Si Variable [0002: Coordonnée Y] != 5
nnnnnnnnnnnnnnn@> Sortir de la boucle
nnnnnnnnnnnnnnn@>
nnnnnnnnnnnn : Sinon
nnnnnnnnnnnnnnn@> Attendre : 1 Frame(s)
nnnnnnnnnnnnnnn@>
nnnnnnnnnnnn : Fin de la condition
nnnnnnnnnnnn@>
nnnnnnnnn : Fin de la boucle
J'avais dit que la variable à actualiser et à vérifier dépendait du mouvement qui suivait le moment où l'évènement passait par la dernière case...
Voyez sur cette image:
En jaune, la case à partir de laquelle on doit vérifier que l'évènement passe, en rouge, la trajectoire de base de l'évènement...
On voit qu'après avoir passer la case jaune, l'évènement se déplace vers le bas, c'est donc la position en Y qui change (X étant la position horizontale et Y la position verticale)... En se déplaçant vers le bas, X ne change pas, il est donc inutile de vérifier s'il change, on sait que ce ne sera pas le cas... En revanche, Y, lui, change, nous vérifions donc qu'il change bien avant de sortir de la boucle pour que, comme dit dans l'évènement commenté, la variable ne s'incrémente pas à chaque frame.
Donc, tout ce qu'il faut savoir, c'est que:
- Si, après avoir passé la case vérifiée, l'évènement se déplace horizontalement, alors, c'est la variable X qu'il faut actualiser et vérifier;
- Si l'évènement se déplace verticalement, c'est la variable Y qu'il faut actualiser et vérifier