1
我在SFML 2中做了一个简单的游戏,到目前为止顺利。我创建了两个sf :: Sprite列表,一个用于敌人,一个用于激光。随机产生的敌人离开屏幕,每当输入时就会创建激光。我为这两个列表创建了一个碰撞循环并执行了我的代码。没有编译时和运行时错误。激光与敌人的碰撞对前3到4名敌人都很好,但在此之后,碰撞不会发生。什么可能导致这个问题?请帮助我。谢谢。这是我的代码。两个精灵列表的碰撞 - 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);
++erased;
}
greenlaserit = reload;
}
enemyit = next;
}
我没有使用C++ 11。但是,我会尝试你的第二种方法。谢谢。 – WDRKKS
是否有什么特别的原因让你通过创建第二个变量(next,reload)来遍历列表,然后立即迭代它?在我看来,这总是会跳过列表中的第一个元素。 – charzoc
这是为了确保迭代器不会到达list :: end()。当我不使用第二个变量时,它会崩溃。 – WDRKKS