for (std::vector<Sprite*>::iterator outerIter = sprites.begin(); outerIter != sprites.end(); outerIter++)
{
Sprite* spriteOne = *outerIter;
for (std::vector<Sprite*>::reverse_iterator innerIter = sprites.rbegin(); innerIter != sprites.rend(); ++innerIter)
{
Sprite* spriteTwo = *innerIter;
if (spriteOne->getRect() != spriteTwo->getRect() && spriteOne->getRect().overlaps(spriteTwo->getRect()))
{
spriteOne->collisionReaction(spriteTwo);
spriteTwo->collisionReaction(spriteOne);
spriteOne->collisionDestroy(sprites);
spriteTwo->collisionDestroy(sprites);
}
if (!spriteOne)
break;
}
}
Det som hnder r att man hoppar in i yttre loopen, sen inre loopen och kr igenom inre loopen en gng. Sedan s ska den hoppa upp och kra inre loopen igen, men dr ger den felet "Expression: vector iterator not decrementable".
Hr r funktionen man kallar p (collisionReaction gr inget annat n att stta lite olika lokala vrden i objecten):
void Enemy::collisionDestroy(std::vector<Sprite*>& sprites)
{
for (std::vector<Sprite*>::iterator iter = sprites.begin(); iter != sprites.end(); iter++)
{
Enemy* tmp = dynamic_cast<Enemy*>(*iter);
if (this == tmp && collisionType == 3 || collisionType == 1)
{
sprites.erase(iter);
break;
}
}
}
Hjlp
EDIT: Ledsen ver ingen indentering, vet inte hur man gr.