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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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.
Partager