我有一个小问题,我必须基于SDL构建2D游戏。
当我尝试删除在“场景”中发生冲突的2个对象时,我只会不断收到此错误消息。
std::vector<WaspObject*>::iterator itw;
std::vector<ProjectileObject*>::iterator itp;
for (itp = _projectiles.begin(); itp != _projectiles.end();)
{
for (itw = _wasps.begin(); itw != _wasps.end();)
{
if ((*itw)->Get_PositionY() + 37 >= (*itp)->Get_PositionY() + 0 && (*itp)->Get_PositionX()+0 >= (*itw)->Get_PositionX()+0 && (*itp)->Get_PositionX()+0 <= (*itw)->Get_PositionX()+49)
{
itw = _wasps.erase(itw);
itp = _projectiles.erase(itp);
}
else
{
itw++;
itp++;
}
}
}
_wasps和_projectiles是此场景中的std向量。
有人可以帮我找到问题吗?提前致谢!
最佳答案
如果在内循环中未获得任何点击并增加itp
,则很有可能会超过_projectiles.end()
。
例如,如果黄蜂多于弹丸。或者,如果您位于最后一个弹丸上,则在单个_projectiles.end()
之后将到达itp++
。
因此,您可能希望在内循环的每一圈测试两个最终条件。