Oui les affichages sont lent si on fait trop d'appels à draw, moi je fais un appel à draw par tile visible à l'écran et même si je tourne avec un bon FPS, au niveau des animations (ou je change de tiles à chaque fois.) ça saccade pas mal :
http://www.youtube.com/watch?v=0dqXs82VNbI&feature=youtu.beJe penses que il faudrait plutôt que j'essaye d'utiliser une tileMap ?
Faut que j'aille voir sur le tutoriel de Laurent.
Pour l'affichage de ce qui est visible à l'écran, je ne sais pas comment tu gère le stockage des tiles donc, mais moi je mets mes tiles dans une grille virtuelle remplie de losanges, chaque losange à une coordonnée iso (0, 0; 1, 0, 2, 0, etc...) et je me sert de ses coordonnées pour récupérer l'indice du losange dans mon vecteur.
Je récupère chaque losange qui se trouve dans la vue en oubliant pas de décaler une ligne sur deux.
//Cherche les tiles qui sont visibles à l'écran.
void GridMap::checkVisibleTiles (Vector2f ¢erView) {
visibleTiles.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);
if (cell != NULL) {
for (unsigned int n = 0; n < cell->getEntitiesInside()[l].size(); n++) {
Entity* entity = cell->getEntityInside(n, l);
Tile *t;
if (entity->getType() == Entity::E_GROUND
|| entity->getType() == Entity::E_DECOR
|| entity->getType() == Entity::E_WALL) {
t = static_cast<Tile*>(entity);
}
}
}
}
}
}
}