在Box2d中删除Body - C ++

时间:2017-02-28 20:23:17

标签: c++ box2d sfml

我试图在任何地方为这个问题寻找解决方案无济于事。我自己也尝试了很多不同的方法尝试解决这个问题,但没有任何效果。

每当我尝试从世界中删除一个正文时,我在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);
            }
        }
    }
}

1 个答案:

答案 0 :(得分:2)

经过一夜的睡眠后,我回到了问题并进行了调试。我发现我没有清除m_PlankObjects数组,因此在下一个游戏循环更新中它再次被访问,但由于没有可访问的实体,Box2d抛出异常。