box2d -c 中删除主体

Deleting Body in Box2d - C++

本文关键字:主体 删除 box2d      更新时间:2023-10-16

我尝试在任何地方为此问题寻找解决方案,但无济于事。我还尝试了许多不同的方法来尝试解决这个问题,但是没有任何效用。

每次我尝试从世界上删除一个尸体时,我都会在Box2D中的Islocked方法中得到读取访问违规。

我尝试创建一个向量列表,然后删除该列表中世界上的所有身体。在删除之前,我确保检查我没有踏上世界,并且我的列表中没有重复的内容,并且世界没有锁定。

我将它们添加到列表中:

for (size_t i = 0; i < m_PlankObjects.size(); i++)
{
    m_Game->m_DestroyObjectList.push_back(m_PlankObjects[i].GetBody());
}

这是getbody()方法:

b2Body * GameObject::GetBody()
{
    return m_Body;
}

m_body的定义如下:

b2Body* m_Body;

和这样销毁:

if (m_UpdateWorld)
{
    World.Step(1 / 60.f, 8, 3);
}
else
{
    if (!World.IsLocked())
    {
        if (m_DestroyObjectList.size() != 0)
        {
            for (size_t i = 0; i < m_DestroyObjectList.size(); i++)
            {
                World.DestroyBody(m_DestroyObjectList[i]);
                m_DestroyObjectList.erase(m_DestroyObjectList.begin() + i);
            }
        }
    }
}

晚上睡觉后,我回到了问题并调试了它。我发现我没有清除m_plankobjects数组,因此在下一个游戏循环更新中,它将再次访问,但是由于无法访问任何尸体,Box2D会抛出一个例外。