Bonjour,
j'avais déjà utilisé la sfml 1.6 auparavant, mais avec la nouvelle version et l'apparition des Textures, je me pose des questions !
Je cherche à un faire un truc plutôt simple : dessiner une map selon un tableau d'entiers. Ces entiers sont des indices disant où chercher la tile dans le tileset.
Il y a deux façons de faire assez différentes.
Les puces et les APIs graphiques modernes sont vraiment faites pour des cycles clear/draw/display répétés, où tout est complètement rafraîchi à chaque itération de la boucle de dessin. Ne soyez pas effrayés de dessiner 1000 sprites 60 fois par seconde, vous êtes encore loin des millions de triangles que votre machine peut gérer.
Option 1 --> très classique, on dessine (largeur*hauteur) tiles.
Ainsi pour une map de 20x20 avec des tiles de 32 pixels, on appelle 400 fois draw pour des affichages de 1024 pixels.
__________
MAIS
__________
Par exemple, vous atteindrez très rapidement les limites de votre carte graphique si vous dessinez un grand nombre de sprites. La raison est la suivante : les performances sont directement liées au nombre d'appels à la fonction draw.
De plus, utiliser une unique texture vous permettra si nécessaire de regrouper toute la géometrie statique en une seule entité (vous ne pouvez en effet utiliser qu'une seule texture par appel à la fonction draw), ce qui sera nettement plus performant que de dessiner un groupe de plusieurs entités.
Option 2 --> Créer une grosse texture (par exemple au chargement de la map) qui contiendra en fait toutes les tiles, en copiant les pixels uns par uns).
Ainsi pour la même map on fait 1 seul appel à draw, pour environ 410000 pixels. Et la gestion de la vue est plus facile.
Donc, qu'est-ce qui est le mieux ?
La première option fait plus d'appels à draw, mais sur des images plus petites.
La seconde ne fait qu'un appel, mais on dessine des chose hors-écran, c'est du gachis. EN plus j'ai vu sur le forum que les textures avaient une taille limite.
Sur une map de 20*20 je ne pense pas que ce soit significatif, mais sur une map de 500*500, le nombre d'appels à draw explose dans le cas 1, et la taille dans le cas 2 devient énorme.
(Une solution intermédiaire consiste à mixer les deux : faire une seule image, contenant uniquement ce qu'on peut voir, et la recalculer à chaque déplacement du personnage. )
Merci d'avance pour vos réponses et éclaircissements !