Je trouve aussi que pas mal de fonctions de cette librairies sont, hum, lente, quand j'utilise le profiler mais en c++, me semblait bien que il n'y avait pas que moi.
Il m'a fallut faire un code vraiment très optimisé et avec ça j'ai un framerate de 20, je mesure ça avec la classe clock mais j'ai 4 threads qui tourne en parallèle donc je ne sais pas si je peux me baser sur le framerate dans le cas ou j'utilise plusieurs thread. (Je ne pense pas.)
Mais bref mon appli n'est pas grande, elle fait appel aussi à des fonctions du genre mapCoordsToPixelassez souvent. (A chaque fois que le personnage se déplace.)
Et bon ça ralentis quand même beaucoup ce genre de fonction, dès que mon personnage se déplace j'ai mon framerate qui baisse de beaucoup. :/
Et pourtant j'ai optimisé à mort mon algortihme sinon ça ne tournais pas du tout, je ne fais juste que de récupérer les tiles dans la caméra avec une boucle, dans laquelle j'utilise une bête formule et puis j'insère la tile dans un std::vector (je ne fais même pas de tri, ni de test pour savoir si une tile est dans le rectangle de la caméra, non, je prend la position de la caméra et je vais jusqu'à la fin de la caméra en avançant de x et de y et je récupère à chaque fois la tile qui se trouve en x, y avec une formule, bref, je saurai pas faire mieux au niveau optimisation :
//Recherche les sprites qui sont visible à l'écran.
void GridMap::checkVisibleTiles (Vector2f ¢erView) {
visibleTiles.clear();
visibleAnims.clear();
visibleMonsters.clear();
int x = (centerView.x - Configuration::getConfiguration().x / 2) - 100;
int y = (centerView.y - Configuration::getConfiguration().y / 2) - 50;
int endX = (centerView.x - Configuration::getConfiguration().x / 2) + Configuration::getConfiguration().x + 100;
int endY = (centerView.y - Configuration::getConfiguration().y / 2) + Configuration::getConfiguration().y + 50;
BoundingRectangle br(x, y, Configuration::getConfiguration().x + 100, Configuration::getConfiguration().y + 50);
for (int l = 0; l < NB_LAYERS; l++) {
for (int i = x / 100 * 100; i <= endX / 100 * 100; i+=100) {
for (int j = y / 50 * 50; j <= endY / 50 * 50; j+=25) {
int deltaX = (j % 50 == 0) ? 0 : 50;
Vec2f point(i + deltaX, j);
CellMap* cell = getGridCellAt(point);
//Et j'insère tous les sprites qui sont dans la cellule, dans un std::vector pour pouvoir ensuite les afficher à l'écran.
Malgré ça, ça ralenti à mort les performances, c'est pas injouable mais je vois mon framerate baisser pas mal. (J'ai même appeler cette méthode toutes les secondes seulement tellement que la fait de modifier la vue et convertir les coordonnées ça fait ralentir mon jeux.) :/
Essaye d'éviter d'appeler ses fonction trop souvent.