1
Graphique / Probleme avec la fonction des sprite : setPosition(float x, float y);
« le: Juin 30, 2015, 11:42:20 am »
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.
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
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.{
//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;
}
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