| Merki !
[edit tl;dr :
première image : ça vérifie si la Lune est au bord de la map et d'où elle vient, pour déterminer ensuite s'il faut la faire changer de direction, et vers quelle direction
deuxième image : même système avec en plus affichage en picture (dont le numéro est une variable qui fait +1 à chaque fois) d'une Lune semi-transparente aux coordonées de la Lune principale]
Pour la Lune principale (première image) :
- l'event de la Lune est un simple chara, l'event est vierge autrement (aucune commande)
- je règle la vitesse de la Lune dans la partie "Movement Speed" de l'event dont je viens de parler
- un deuxième event, automatique car de démarrage, règle les variables "moon_from" et "moon_direction" chacunes à 1 (c'est utile pour plus tard)
- cet event de démarrage passe ensuite à sa seconde page (via un interrupteur), cette fois en processus parallèle, et qui enregistre en temps réel dans une variable la coordonnée x de l'event de la Lune et dans une autre variable sa coordonnée y
- un troisième event possède quatre pages, l'une ou l'autre s'activant en fonction de la valeur de la variable "moon_direction" (1 à 4), et toutes sont en processus parallèle, chacune demandant à l'event de la Lune de faire un pas en diagonale (quatre pages pour quatre directions possibles), le pas se répétant du fait du processus parallèle
- un quatrième event, en processus parallèle, vérifie si l'event de la Lune est sur un des bords de l'écran (x0, x19, y0 ou y14), si c'est le cas il vérifie ensuite de quel bord l'event de la Lune vient (au moyen de la variable "moon_from"), puis à partir de ces deux données il change la variable "moon_direction" pour changer la direction de la Lune (exemple : la Lune est sur le bord haut (y0) et elle vient du bord droit (x19), elle doit donc dorénavant aller en diagonale bas-gauche, ce qui correspond dans mon système à la valeur "2" de la variable "moon_direction")
- juste après avoir changé la direction de la Lune ("moon_direction") ce quatrième event change la valeur de "moon_from", la Lune ayant atteint un nouveau bord
Ça pourrait s'arrêter là si la map était carrée, mais les dimensions de cette dernière font que parfois la Lune touche le bord haut en ayant touché auparavant non pas le bord gauche ou droite mais le bord bas, et inversement (bord bas en ayant touché juste avant le bord haut). Et là il ne me suffit plus de savoir que la Lune à d'abord toucher le bord haut/bas, vu que dans ces circonstances cette information ne m'aide plus à pouvoir déterminer si la Lune doit repatir du côté gauche ou du côté droit (et je ne peux pas utiliser comme indication de quel côté est tournée la Lune vu que dans mon système RM la fait toujours tournée vers le haut ou vers le bas). Du coup :
- un cinquième event, en processus parallèle, utilise la coordonnée x de la Lune pour enregistrer dans une nouvelle variable (nommée "special_y") si la Lune touche le bord gauche ou droit (en donnant à la variable "special_y" la valeur 1 ou 2)
- à la fin de mon quatrième event, je rajoute quatre nouvelles possibilités de changement de direction, par exemple la suivante : "si l'event de la Lune touche le bord haut de la map, et que juste avant elle a touché le bord bas, et que le dernier bord latéral qu'elle a touché était le gauche (special_y = 1), alors modifier la valeur de moon_direction pour que la Lune aille désormais en diagonale bas-droite"
Concernant ce qu'il se passe quand la Lune touche un coin, je n'en ai aucune idée. x) Je suppose que RM établit un ordre parmi les possibilités demandés simultanément, en fait ça importe peu qu'il considère que la Lune a touché tel bord avant l'autre vu que la conséquence des deux est un rebond vers l'autre et que dans les deux cas ce second rebond demande la même direction que si ça avait été l'autre (bon ce n'est pas très bien formulé mais je pense être clair ^^).
Pour la Lune qui laisse une trainée (seconde image) :
Bin là c'est très simple, c'est le système précédent avec en plus un event en processus parallèle qui tous les 1/10èmes de seconde affiche une picture de la Lune en semi-transparent et aux coordonnées de la Lune principale (ça demande de faire quelques opérations avec les variables vu que les coordonnées des pictures sont en pixels et non en carreaux, mais c'est très simple). Le numéro de la picture est une variable qui augmente de 1 après chaque nouvelle Lune. J'ai dû rajouter un "attendre 0.0 s" (qui correspond en réalité à... je sais plus, 1/60ème de seconde je crois ?) sinon ça affichait parfois des Lunes doublées dès le premier passage (et je ne pouvais pas changer mon "attendre 1/10ème de seconde" en "2/10èmes de seconde" car ça générait des trous dans la trainée).
La limite de ce système (en plus du fait que ça plante au bout de 1000 Lunes) c'est que ça ne peut afficher les pictures que de façon alignée sur les carreaux, du fait que ça se base sur les coordonnées x et y en carreaux de la Lune principale.
|