Collisions sol

5 sujets de 1 à 5 (sur un total de 5)

  • leo

    • Messages : 3501
    #301304

    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 ?

    AmiDARK

    • Messages : 2942
    #301307

    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 …

    Sadirux

    • Messages : 282
    #301336

    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 [email protected] - OS 3.1 MagicWB, X5000 - OS4.1 - R7 250

    thellier

    • Messages : 662
    #301338

    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 douce

    Pour 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
    00000000123000000

    heros.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 fichier

    Par 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

    leo

    • Messages : 3501
    #301432

    Merci pour les pistes: je vais étudier ça de près 🙂

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

Do NOT follow this link or you will be banned from the site!