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

Auteur Sujet: Probleme avec la fonction des sprite : setPosition(float x, float y);  (Lu 685 fois)

0 Membres et 1 Invité sur ce sujet

Sacrefeu

  • Newbie
  • *
  • Messages: 1
    • Voir le profil
Bonjour,

Je débute en programmation et je me suis récemment mis a utiliser la sfml. Ayant appris des éléments permettant de faire des premier pas dans le "développement" de jeu vidéo je me suis mis a faire un plat-former.
J'ai tout d'abord écrit un "prototype" pour comprendre quelques mécanismes et notamment apprendre a gérer les collisions puis j'ai importer cette fonction (ci dessous) dans mon projet.
bool Level::ColisionPE(Sprite &sprite)
{
      //m_map = std::vector<sf::Sprite>
     //32*32 = taille de la texture du sprite; 50*50 = talle de la texture de m_map[i](elle est la même pour tous les sprites du tableau)
        for(int i = 0; i < m_map.size(); i++)
        {
                //Colision par dessus
                if(IntRect(m_map[i].getPosition().x, m_map[i].getPosition().y, 50, 50).contains(sprite.getPosition().x + 16, sprite.getPosition().y + 32))
                {
                        sprite.setPosition(sprite.getPosition().x, m_map[i].getPosition().y - 50.f);
                        return true;
                }
                //Colision Par dessous
                if(IntRect(m_map[i].getPosition().x, m_map[i].getPosition().y, 50, 50).contains(sprite.getPosition().x + 16, sprite.getPosition().y))
                {
                        sprite.setPosition(sprite.getPosition().x, m_map[i].getPosition().y + 50.f);
                        return false;
                }
                //Colision a gauche
                if(IntRect(m_map[i].getPosition().x, m_map[i].getPosition().y, 50, 50).contains(sprite.getPosition().x, sprite.getPosition().y + 16))
                {
                        sprite.setPosition(m_map[i].getPosition().x - 50.f, sprite.getPosition().y);

                        return false;
                }
                //Colision a droite
                if(IntRect(m_map[i].getPosition().x, m_map[i].getPosition().y, 50, 50).contains(sprite.getPosition().x + 32, sprite.getPosition().y + 16))
                {
                        sprite.setPosition(m_map[i].getPosition().x + 50.f, sprite.getPosition().y);
                        return false;
                }
        }
        return false;
}
 
Le problème n'est pas la collision en elle même car les "returns" sont bons. Le problème viens du fait que la position du sprite n'est pas modifiée(je précise qu'elle l'est dans mon"prototype"), j'ai essayé plusieurs solutions : Au lieu d'une référence de mettre un pointeur, d'utiliser setPosition(sf::Vector2f(float x, float y));, de modifier la position de la m_map(i) et de la remettre après, si il y a d'autre option non explorée, que vous penser avoir une solution ou souhaitez avoir une partie du code en question n'hésitez pas a répondre/demander.

PS: Si vous savez comment on peut récupérer la texture et ainsi, sa taille d'un sprite je suis intéressé.

Merci de vos réponses, Sacrefeu