Bonjour à tous!
Allez, pour aller droit au but, dans mon système isométrique:
- La carte est composée de layers, un par étage, un layer étant un sf::VertexArray;
- Les objets de map sont dessinés entre chaque bon étage, et doivent être intercalés derrières les tuiles situées devant eux, etc;
J'expérimente actuellement une méthode pour dessiner mon objet entre 4 vertices (1 tuile).
En gros, j'aimerai effectuer dans l'ordre le dessin de:
- La partie du layer qui ne cache pas l'objet
- L'objet
- La partie du layer qui cache l'objet
Ce à l'aide de cette fonction. (Ne vous préoccupez pas de la re-déclaration du sprite à chaque frame, des valeurs brutes, tout cela n'est pas encapsulé mais le sera: pour l'instant c'est juste un test) :
void Layer::draw(sf::RenderTarget &target, sf::RenderStates states) const
{
sf::Texture tex;
tex.loadFromFile("objet.png");
sf::Sprite sprite;
sprite.setTexture(tex);
sprite.setPosition(410, 300); //La position appropriée pour que l'objet soit sensé être caché
states.transform *= getTransform();
states.texture = &m_texture;
if(m_layer==1) // Si le layer actuel est le n°1, alors on doit se charger de dessiner l'objet entre 2 tuiles
{
target.draw(&m_vertices[0], 396, sf::Quads, states); // Les 99 premières tuiles
target.draw(sprite); //L'objet
target.draw(&m_vertices[396], 4, sf::Quads, states); //La dernière tuile, qui doit cacher l'objet
}
else //Autrement, on ne se préoccupe pas de l'objet, on dessine tout le layer d'un coup
{
target.draw(m_vertices, states);
}
}
Ici, pour info, mon personnage est positionné entre la 99ème tuile et la dernière, soit dans la dernière ligne de droite du layer.
Seulement voilà le problème: le sprite de l'objet n'est pas caché derrière ce dessin:
target.draw(&m_vertices[396], 4, sf::Quads, states);
Et je ne comprend mais vraiment pas pourquoi:
- Erreur de logique de ma part, auquel cas je vous laisse tranquille et je vais repenser mon système?;
- Qu'importe l'ordre d'appels des draw(), les entrailles d'SFML dessinent les sf::Drawable "type" par "type": sprite d'un coup, etc... ?
Merci d'avance.