Bonjour !
La semaine dernière, j'ai commencé à m'intéresser à la conception d'un jeu vidéo 2D (sans avoir l'intention d'en faire un complet mais au moins quelque chose de jouable avec 2-3 maps, ça serait un excellent objectif pour ma part ) en utilisant d'abord SDL puis je me suis tourné vers SFML car il était plus adapté à la façon dont je concevais mon jeu (et je trouve qu'il encapsule déjà pas mal de chose, enfin bref étant un gros débutant en la matière je ne vais pas m'avancer sur le sujet plus que ça mais j'ai eu plus facile de prendre en main SFML que SDL d'où le changement).
Bref, là j'en suis à concevoir ma première tile map. J'avais déjà une idée d'algo en tête : une simple boucle créant un sprite, puis le dessine mais de ce que j'ai pu voir c'est à éviter : si j'ai bien compris le problème, SFML utilise par défaut l'accélération matérielle, ce qui a des avantages mais aussi des inconvénients : le fait de demander au GPU de dessiner une tuile est coûteux (SFML utilisant OpenGL, y a toute une initialisation à faire), surtout si l'on demande cela à chaque tuile (il y a autant d'appel à la méthode draw
que de tuile). Par contre l'affichage de la tuile sera bien plus rapide. Sur le site, il est alors préconiser d'utiliser un tableau de vertex (un vertex est un « point » ou plutôt un sommet) : il faut donc « dessiner » la tuile coté par coté, mais l'avantage est qu'on stocke chaque tuile dans un tableau et par conséquent on fait, au final, un seul appel à la fonction draw
.
Un exemple de code est présenté dans ce tuto.
Le problème c'est que j'ai un peu plus de mal à le comprendre (bien qu'après l'avoir relu plusieurs fois ça s'est un peu éclairci mais je trouve cela plus compliqué comparé aux sprites).
L'autre question que je me suis posé, c'est que, si, encore une fois, j'ai bien compris, le seul avantage des vertex dans ce cas (ou du tableau de vertex plutôt) est de pouvoir passer un tableau et non un seul élément à la fois (donc un seul appel à draw
) : ne pourrait t-on pas faire de même avec des sprites, c'est à dire faire un tableau de sprite, texturer les différents éléments du tableau et passer le tout à la méthode draw
du renderer ?
Bref, j'avoue que sur ce point j'ai un peu de mal à comprendre pourquoi un tableau de vertex marche et pourquoi un tableau de sprite (je parle bien d'éléments de type sf::Sprite) ne fonctionnerait pas.
Si quelqu'un peut éclairer ma lanterne de débutant, ça serait vraiment sympa.