probl�me de tri avec std::sort
Bonjour.
J'ai un soucis, ca fait pas mal de temps que je cherche une solution sans r�sultats:
J'utilise la SFML, pour un jeux en vue isom�trique. Je dois trier les images en fonction de leur position Y.(pour passer devant ou derri�re).
J'ai une entit� qui stock des VertexArray, et un pointeur de texture, ainsi qu'un float Z pour trier les images. J'utilise un froncteur, et cela fonctionne au d�part, mais par la suite, mes images ne se trient pas.
Voici le code:
ici le code pricipale qui affiche les images.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
|
while (fenetre.isOpen()&&!controles.quitter())
{
...
vector<EntiteImage> entiteImage;
while(afficheur.contientImage())
{
entiteImage.push_back(afficheur.renvoiEntiteImage());
afficheur.imageSuivante();
}
sort (entiteImage.begin(), entiteImage.end(), TrieImage());
fenetre.clear(sf::Color::Black);
for ( vector<EntiteImage>::iterator it = entiteImage.begin() ; it!= entiteImage.end() ; it++ )
{
fenetre.draw(*it);
}
fenetre.display();
} |
ici l'entit� qui contient les informations n�cessaires pour les images:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
|
class EntiteImage : public sf::Drawable
{
public:
friend struct TrieImage;
virtual void recoiVertexArray(sf::VertexArray vertexArray)
{
m_vertexArray = vertexArray;
}
void recoiVertexEtTexture( sf::VertexArray vertexArray, sf::Texture *texture)
{
m_vertexArray = vertexArray;
m_texture = texture;
}
void recoiZ(float z)
{
m_z = z;
}
private:
virtual void draw(sf::RenderTarget& target, sf::RenderStates states) const
{
states.texture = m_texture;
target.draw(m_vertexArray, states);
}
float m_z;
sf::VertexArray m_vertexArray;
sf::Texture *m_texture;
};
struct TrieImage
{
bool operator() (const EntiteImage & a, const EntiteImage & b) const
{
return a.m_z < b.m_z;
}
}; |
Comme je le disais plus haut, cela me trie bien les images, mais au d�but seulement. Lorsque, par exemple, j'en d�place une, passant dessus ou dessous, en montant ou descendant, elle conserve sa position par rapport � l'autre.
Merci si vous pouvez m'ader.