mercredi 22 octobre 2008

Dev - Les plateformes

C'est un des premiers ajouts que j'ai fait (après les pièces, les ennemis et la forme de clé). Malheureusement, je n'ai pas pensé à travailler sur les graphismes, alors j'ai fait un gros carré rouge, et je m'en contente pour le moment.
J'ai décidé de gérer les collisions avec la plateforme comme avec le sol : détecter si le héros touche la plateforme, et si elle se trouve sous ses "pieds". Cette méthode a été reprise du wiki de la PAlib :

if (héros après le côté gauche) && (héros avant le côté droit){
if (point tout en bas du héros) && (vitesse>=0){
héros.y-=1<<8;}

Ensuite on recherche une plateforme en dessous :

if (héros après le côté gauche) && (héros avant le côté droit){
if (point tout en bas du héros+1) && (vitesse>=0){
vitesse verticale du héros=0;}

Avec ça, le héros peut marcher sur la plateforme à l'arrêt. Car si on mets la plateforme en mouvement, il se contente de tomber une fois qu'il est dans le vide.

Les plateformes possèdent toutes un variable qui définit le sens dans lequel elles bougent(-1 pour gauche, 1 pour droite), et leur vitesse horizontale est de 2 pixels/frame.

Donc, quand la plateforme est sous le héros, on ajoute à la position du héros la vitesse de la plateforme, multipliée par la variable qui contient la direction. Et on obtiens ceci :

if (héros après le côté gauche) && (héros avant le côté droit){
if (point tout en bas du héros+1) && (vitesse>=0){
vitesse verticale du héros=0;
héros.x+=(vitesse horizontale*variable du sens de déplacement)<<8;
}

On en arrive au dernier point important pour les plateformes, le changement de direction. En effet, si une plateforme continue de bouger sans jamais s'arrêter, elle ne servira pas à grand chose (sauf pour un niveau avec un scorlling horizontal forcé).

Si comme moi, vous utiliser une carte de collision, le reste est très simple : il suffit de détecter la collision de la plateforme avec une tile ,spécifique, uniquement dédiée à cela. Ensuite, il faut simplement multiplier la variable de direction par -1, ce qui à pour effet de changer le sens de cette plateforme.

Et voila, mon premier VRAI article sur le développement. Je ne suis pas spécialement doué pour expliquer mon principe de fonctionnement, mais je n'ai pas vu de tutoriel dédié à la création de plateforme, alors j'ai essayé d'expliquer du mieux que j'ai pu comment je m'y suis pris, en espérant que je puisse aider quelqu'un.

Remarque :


-Comme expliqué sur le wiki de la PAlib, j'utilise les points fixes pour mes variables. C'est de là que viennent les "<<8".
-J'ai remarqué que le héros se déplaçait systématiquement de (vitesse horizontale*variable du sens de déplacement) pixels lorsque la plateforme rentre en collision avec la tile qui lui permet de changer de sens (et qu'il est dessus, bien entendu). J'ai donc un peu bidouillé en rajoutant l'inverse de cette valeur quand le héros est sur la plateforme et que celle-ci se cogne contre un des fameuses tiles. Ça a marché, je me suis donc arrêté là. Si quelqu'un trouve une autre solution, qu'il m'en fasse part dans les commentaires.
-Pas d'images pour ce tuto : une image statique ne sert à rien, et faire un GIF ne m'est pas passé par la tête (en fait si, mais non).
Pas d'exemple non plus, mais vous en aurez un si je release un jour le code source de WTN.



Aucun commentaire: