Bonjour à tous!
Je suis actuellement sur un projet de jeu type "RTS" que je développe sous la SFML 2.4 en C++.
Le développement avançait bien lorsque je me suis rendu compte qu'un certain nombre d’unités ou de tiles faisait un "lag" affreux (700 tiles -> 3 images/s ).
Après avoir fait des recherches, j'ai trouvé qu'un "trop grand nombre d'appel a la fonction draw" pouvait en être la cause. Etant donné que chaque tile ou unité est une classe comprenant un sf::Sprite, un référence sur une texture, un nb de points de vie... ect , cela me donnait un appel a draw() pour chaque personnage, un pour chaque tiles.. ect.
J'ai donc essayé la méthode de la VertexArray pour dessiner en premier temps mon TileMap en entier. Cela fait, je me rend compte que pour 700 tiles le rendu est bien instantané.
Mais en utilisant cette technique un problème se pose a moi, comment gérer l’ordre d'affichage des unités ? tiles ? Avant je pouvais faire mes tests sur leur position, état, visibilité a l'écran et appeler le draw sur chaque entité. Maintenant tout est en "block" et je suis bloqué pour trouver la bonne méthode de conception...
Voici donc mes deux questions:
- Cela est t'il normal que la SFML lag avec 700 appels a draw() ? (tiles[1]->draw() )
- Si il faut bien utilisé la méthode VertexArray, avez vous une piste de conception pour pouvoir gérer les éléments comme expliqué si dessus ( est dans l'écran, a dessiner en premier, ect..) ?
Merci d'avance pour toute réponse
ps: J'ai oublié de préciser que c'est un rts 2D iso comme Age of Empires II par exemple.