problem mit vektoren
-
also ich habe ein grid gebastelt, welches ein zweidimensionaler array aus vektoren ist, um bei der interaktion zwischen meine partikeln die rechenzeit zu reduzieren (es werden nur die partikel aus umliegenden zeilen/spalten einbezogen)
struct particle { double x; double y; double xVel; double yVel; POINT gridPos; Uint32 color; int gridId; };vector<particle> particleGrid[(SCREEN_WIDTH-1)/GRID_RESOLUTION][(SCREEN_HEIGHT-1)/GRID_RESOLUTION]; vector<particle> particles;POINT getGridPos(particle p) { POINT ret; ret.x = (p.x*GRID_RESOLUTION)/SCREEN_WIDTH; ret.y = (p.y*GRID_RESOLUTION)/SCREEN_HEIGHT; return ret; }for(int p = 0; p < PARTICLE_COUNT; p++) { particle tmp; tmp.x = rand()%SCREEN_WIDTH; tmp.y = rand()%SCREEN_HEIGHT; tmp.xVel = ((rand()%40) - 20)/10.; tmp.yVel = ((rand()%40) - 20)/10.; tmp.color = SDL_MapRGB( screen->format, 1, 0, 0); tmp.gridPos = getGridPos(tmp); tmp.gridId = particleGrid[tmp.gridPos.x][tmp.gridPos.y].size(); particleGrid[tmp.gridPos.x][tmp.gridPos.y].push_back(tmp); particles.push_back(tmp); }for(int k = 0; k < PARTICLE_COUNT; k++) { particle tmp = particles.at(k); //[...] //grispos: POINT nGridPos = getGridPos(tmp); if(nGridPos.x != tmp.gridPos.x || nGridPos.y != tmp.gridPos.y) { //gridpos changed! if(particleGrid[tmp.gridPos.x][tmp.gridPos.y].size() > 0) { //kopiere letztes element an die position des zu löschenden elements particleGrid[tmp.gridPos.x][tmp.gridPos.y].at(particleGrid[tmp.gridPos.x][tmp.gridPos.y].size()-1).gridId = tmp.gridId; particleGrid[tmp.gridPos.x][tmp.gridPos.y].at(tmp.gridId) = particleGrid[tmp.gridPos.x][tmp.gridPos.y].at(particleGrid[tmp.gridPos.x][tmp.gridPos.y].size()-1); //lösche letztes element particleGrid[tmp.gridPos.x][tmp.gridPos.y].pop_back(); //<-------------- //partikel kommt in den neuen vektor tmp.gridPos = nGridPos; tmp.gridId = particleGrid[nGridPos.x][nGridPos.y].size(); particleGrid[nGridPos.x][nGridPos.y].push_back(tmp); } } /[...] particles.at(k) = tmp; }wenn ich die markierte zeile(<------) auskommentiere, dann läuft es, wird aber natürlich immer langsamer, da die vektoren immer voller werden. wenn ich die zeile nicht auskommentiere, kriege ich bei 80 partikeln, nach weniger als ner halben sekunde nen zugriffsfehler!
warum? ich finde den fehler einfach nicht!
EDIT:MAHH natürlich..ich depp...
die partikel in particles und particleGrid sind nicht die gleichen gnaaaaawie kann ich im grid zeigen auf die elemente im anderen vektor speichern ?
ok..hab jetzt einfach die positionen in particles im grid gespeichert