Bienvenue, Invité. Merci de vous connecter ou de vous inscrire.
Avez-vous perdu votre e-mail d'activation ?

Auteur Sujet: [Résolu] [C++/SFML] - Aide sur les collisions dans un jeu de plateforme  (Lu 2322 fois)

0 Membres et 1 Invité sur ce sujet

Kitsu Hokkaido

  • Newbie
  • *
  • Messages: 14
    • Voir le profil
Bonjour,
Jusqu'à maintenant lorsque je codais mon jeu de plateforme seul la collision du bas de mon personnage m'intérressée, je n'avais aucun problème. Mais maintenant, je m'intèresse aussi à la droite et à la gauche. J'ai codé cette fonction mais lorsque je suis en l'air et que je me cogne à un mur mon personnage reste en fait à la même hauteur, cela est du à la position de mes tests. Ma question est donc comment y arriver. Peut-être que je suis parti dans la mauvaise voie.
Mon code :
void Organisme::collisionMap(int *level, int width, int height)
{
        //initilisation de la variable pour nous faire chuter s'il n'y a pas collision
        onGround = false;

        int haut = organisme.getPosition().y;
        int gauche = organisme.getPosition().x;
        int droite = organisme.getPosition().x + 32;
        int bas = organisme.getPosition().y + 32;

        for (int x = 0; x < width; x++)
        {
                for (int y = 0; y < height; y++)
                {
                        int hautM = y * 32;
                        int basM = y * 32 + 32;
                        int gaucheM = x * 32;
                        int droiteM = x * 32 + 32;

                        if (level[x + y*width] == 2 || level[x + y*width] == 4 || level[x + y*width] == 1 || level[x + y*width] == 6 || level[x + y*width] == 9 || level[x + y*width] == 10)
                        {

                                //test si il y a ue collision avec le bas du personnage
                                if (std::abs(bas - hautM == 0) && gauche >= gaucheM && gauche <= droiteM || std::abs(bas - hautM == 0) && droite >= gaucheM && droite <= droiteM)
                                {
                                        organisme.setPosition(organisme.getPosition().x, hautM-32);
                                        onGround = true;
                                        break;
                                }

                                //test si il y a une collision sur la droite
                                if (std::abs(droite - gaucheM == 0) && haut >= hautM && haut <= basM || std::abs(droite - gaucheM == 0) && bas >= hautM && bas <= basM)
                                {
                                        organisme.setPosition(gaucheM - 31, organisme.getPosition().y);
                                        break;
                                }

                                //test si il y a une collision sur la gauche
                                else if (std::abs(gauche - droiteM == 0) && haut >= hautM && haut <= basM || std::abs(gauche - droiteM == 0) && bas >= hautM && bas <= basM)
                                {
                                        organisme.setPosition(droiteM + 33, organisme.getPosition().y);
                                        break;
                                }
                        }
                }
        }

        if (organisme.getPosition().x <= 0)
        {
                organisme.move(0.5, 0);
        }
        else if (organisme.getPosition().x + 32 >= 32 * width)
        {
                organisme.move(-0.5, 0);
        }
}
 
Merci de votre aide.
« Modifié: Juillet 11, 2018, 02:02:59 pm par AquilaHack »

Kitsu Hokkaido

  • Newbie
  • *
  • Messages: 14
    • Voir le profil
Re: [C++/SFML] - Aide sur les collisions dans un jeu de plateforme
« Réponse #1 le: Juin 12, 2018, 07:26:19 pm »
Sujet résolu !! ;D

 

anything