我正在使用 SFML 2.0 编写游戏,其中两个精灵列表之间存在冲突。碰撞代码非常正确,但插入器不知何故搞砸了。我不知道如何解决这个问题。这是我的代码。
std::list<sf::Sprite>::iterator enemyit = enemy.begin(), next;
std::list<sf::Sprite>::iterator greenlaserit = greenlaser.begin(), reload;
while(enemyit != enemy.end())
{
next = enemyit;
next++;
while(greenlaserit != greenlaser.end())
{
reload = greenlaserit;
reload++;
if(enemyit->getGlobalBounds().intersects(greenlaserit->getGlobalBounds()))
{
enemy.erase(enemyit);
greenlaser.erase(greenlaserit);
}
greenlaserit = reload;
}
enemyit = next;
}
在这里,有两个while循环,我正在做的是我正在使用内部循环来检查碰撞,如果发生碰撞,我正在擦除敌人的迭代器。之后,内部循环将继续循环,直到 while 条件不再满足。在完成之前它不会进入外循环。问题是,敌人的迭代器正在内部循环中被擦除,我不会增加它,直到程序返回到外部循环。我该如何做到这一点,以便敌人迭代器在被擦除后立即在内循环中递增。我在循环内外调整了很多移动代码,添加了新变量,但仍然没有。请帮我。谢谢。