Collisions sol
5 sujets de 1 à 5 (sur un total de 5)
-
En train de bosser sur mon propre moteur, je me demande comment étaient effectuées les collisions entre un personnage et le sol sur les jeux de plateformes à l’époque de l’Amiga.
Je sais que l’Amiga est censé le gérer en hardware mais il me semble que cette fonctionnalité n’était pas trop utilisée.
Dans le cas d’un sol en pente, le calcul me semble assez compliqué par rapport à un décor en tiles simple qui reste horizontal.
Quelqu’un a une idée ?
Pour ma part, j’utilisais un « masque » en 2 couleurs.
Pour éviter de faire le rendu d’un énième bitmap, les points (autour du personnage) que j’utilisais pour calculer les limites (boundaries) de collision étaient convertis :
– Je déduisais la tile dans la map dans laquelle le point se trouvait.
– Puis je déduisais les coordonnées X,Y à l’intérieur de la tile
– La je regardai dans le masque de la tile si le joueu pouvait passer au travers … ou pas …Hello,
Il existe une très bonne chaine YouTube pour apprendre à développer un jeu sur pico-8 (une console virtuelle). Les exemples sont concrets et les algorithmes sont bien expliqués, on peut les adapter pour l’Amiga sans trop de modification.
Faire de la gravité dans un jeu 2D – PICO-8 :
A600 - Furia 020@33Mhz - OS 3.1 MagicWB, X5000 - OS4.1 - R7 250
Hello
Je sais pas comment faisais les jeux officiels mais voici ce que j’avais fait pour un projet de jeu circa 1990 du genre Ghostn Goblins avec des niveaux horizontaux et qques plateformes sur A500 :la hauteur du sol était stocké dans un tableau de la largeur du niveau en pixels
La hauteur du sol allait de 0 à 255 mais ici je vais mettre de 0 à 9 pour simplifier
genre 00005550000 = une plateforme à l’altitude 5 de 3 pixels de long
genre 00000123455543210000 = une colline en pente doucePour faire la collision quand le perso tombe après un saut on compare au tableau à la position x du perso genre si heros.y==altitude[heros.x] alors stopper chute
On peut avoir n lignes de niveau et comparer le héros au n lignes
genre pour avoir n plateformes au même endroit
01100002200006600
00005550000002200
00000000123000000heros.y==altitudes[n][heros.x]
Quand on va à droite ou gauche le heros suit la ligne de niveau courante (celle ou il est tombé en dernier) sauf si trop de différence par rapport à son heros.y courant alors chute <==> suit les collines mais tombe des plateformes
Evidemment on peut raffiner:
° ne pas mettre l’altitude à tout les pixels mais disons 1 pixels sur 4 (voire interpoler)
° comparer plus intelligemment que heros.y==altitude[heros.x] si la vitesse de chute est différente de 1 (genre si franchit ligne de niveaux alors s’arrêter)
° saisir directement les courbes de niveaux dans le jeu (utilisé comme editeur) avec le heros qui se met sur la ligne de niveaux: genre j’appuie sur 1 puis touches haut/bas pour monter la ligne de niveau 1 idem pour courbes de niveaux 1 2 3 4 5…
genre
if(key==’1′) {n=0;editmode=TRUE;}
if(key==’2′) {n=1;editmode=TRUE;}
if(editmode)
{
if(key==up) heros.y–;
if(key==down) heros.y++;
altitudes[n][heros.x]=heros.y;
}
puis je sauve les n tableaux de ligne de niveaux dans un fichierPar rapport à un système de collision de type box on ne compare la plateforme que sur un seul coté son sommet = c’est bien mieux
5 sujets de 1 à 5 (sur un total de 5)
- Vous devez être connecté pour répondre à ce sujet.
› Forums › AmigaOS, MorphOS et AROS › Développement › Collisions sol