Forum de la communauté SFML

Aide => Général => Discussion démarrée par: Kitsu Hokkaido le Mai 06, 2018, 05:22:57 pm

Titre: [Résolu] [C++/SFML] - Aide sur les collisions dans un jeu de plateforme
Posté par: Kitsu Hokkaido le Mai 06, 2018, 05:22:57 pm
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.
Titre: Re: [C++/SFML] - Aide sur les collisions dans un jeu de plateforme
Posté par: Kitsu Hokkaido le Juin 12, 2018, 07:26:19 pm
Sujet résolu !! ;D