我现在尝试在 SFML 中编写一个自上而下的射击游戏,但遇到了问题。我对 C++ 和一般编程很陌生,所以请原谅凌乱的代码和/或过于复杂的解决方案。
我有两个std::list
s,一个包含随机生成的敌人,另一个包含我发射的子弹。当子弹击中敌人时,他们都应该被清除,但它不起作用。
这是我的代码的问题部分:
for(MonsterIt = MonsterList.begin(); MonsterIt != MonsterList.end(); MonsterIt++)
{
//Here would be Monster-Movement
//Collision Monster-Player (MonsterIt = iterator of MonsterList)
if ((MonsterIt -> getPosition().x + 25) >= PlayerX - 25 &&
(MonsterIt -> getPosition().x - 25) <= PlayerX + 25 &&
(MonsterIt -> getPosition().y + 25) >= PlayerY - 25 &&
(MonsterIt -> getPosition().y - 25) <= PlayerY + 25 )
{
MonsterList.erase(MonsterIt);
break;
}
window.draw(*MonsterIt);
}
这就是我在 Monster 和 Player 之间进行碰撞的方式。效果很好,所以我对 Monsters 和 Lasers 进行了同样的尝试:
for(LaserIt = LaserList.begin(); LaserIt != LaserList.end(); LaserIt++)
{
//Here would be "Laser-Movement"
//Collision-Laser // Doesn't work
if ((MonsterIt -> getPosition().x + 25) >= //
(LaserIt -> getPosition().x - 7) && //
(MonsterIt -> getPosition().x - 25) <= //
(LaserIt -> getPosition().x + 7) && //
(MonsterIt -> getPosition().y + 25) >= //
(LaserIt -> getPosition().y - 7) && //
(MonsterIt -> getPosition().y - 25) <= //
(LaserIt -> getPosition().x + 7)) //
{ //
MonsterList.erase(MonsterIt); //
//
LaserList.erase(LaserIt); //
//
break; //
} //
window.draw(*LaserIt);
}
当我输入我标记的代码部分(右侧带有 // )时,我在拍摄时立即调试时收到“列表迭代器不可取消引用”错误。当我删掉所说的代码时,它运行良好(我可以射击,走进怪物并且它们消失等等)。因此,我猜我的其余代码正在运行。
那么,不同列表的迭代器之间是否可能发生冲突?如果是这样,我该怎么做?
如果您需要更多信息或代码,请询问。我会很高兴你的帮助...