我有一个小问题,我必须基于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++

因此,您可能希望在内循环的每一圈测试两个最终条件。

10-06 11:44