Bonjour à tous, ca fait un bail que je n'ai pas programmé et je my remet doucement, je vous explique mon problème :
j'ai un tableau a 3 dimensions représentant une carte ( coordx, coordy) chaque case de ce tableau contenant une liste ( pour simplifier un autre vector ) d'objet appartenant a cette case .
Le probleme est que ces objets bouge a chaque frame et il faut donc remetre a jour leur poisition dans le tableau .
Dans chaque case je stocke une liste de pointeur ( cEvent * ) .
Pour la MAJ des position, j'avais pensé : face a un tableau "vierge" , créer en premier lieu un tableau a une dimension contenanat en vrac tout mes objet et parcourir ce tableau pour replacer mes pointeur dans mon tableau selon les bonne coordonées [ je ne pense pas qu'il ai beaucoup plus rapide ... ]
Le probleme est que maintenant, a chaue frame, aprés avoir traité un objet, il me faut le supprimer tu tableau [ afin qu'il n'y ai pas de doublon d'un meme objet ]
Et la je bloque ... je pensait faire comme ca : je parcour mon tableau, je traite les objet rencontré, et je les supprime ( et en chaque début de frame, je RE-remplie mon tableau )
Et ce morceau de code plante [ a lexécution, sans message d'erreur particulièrement pertinent ]
La partie qui fait planter est le ....erase(it)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 for (int i = 0 ; i < Hauteur/2 ; i++ ) { for (int j = 0; j < Largeur/2; j ++) { std::vector < cEvent*>::iterator it ; for ( it = EntitiesPos[j][i].begin(); it != EntitiesPos[j][i].end() ; it++ ) { (*it)->Update(); (*it)->Draw() ; EntitiesPos[j][i].erase(it); } } }
Merci si vous voyez la source de mon problème .
Partager