Libgdx/java 表达式:m_type == b2_dynamicBody

Libgdx/java Expression : m_type == b2_dynamicBody

我目前正在使用 Box2d 和 Libgdx 制作一个小游戏。每个敌人都是 box2d 动态 body,他是可以杀死的,所以当他死后我删除他的 body 所以:

            body.setUserData(null);

            gameScreen.lightManager.world.destroyBody(body);

在我的播放器上可以,即使我杀死了一个敌人也可以。但有时它会突然崩溃并出现此错误异常:

Program: C:\Program Files\Java\jre1.8.0_71\bin\javaw.exe
File: /var/lib/jenkins/workspace/libgdx/extensions/gdx-box2d/gdx-     box2d/jni/Box2D/Dynamics/b2Body.cpp, Line 299

Expression: m_type == b2_dynamicBody

知道为什么会崩溃吗?这个表达式是什么意思? O.o

您必须确保您没有在世界步骤中从世界中移除主体 - 当在您的应用程序的某个异步位置处理移除主体时,可能会发生这种情况。

如果您无法避免处理这种异步情况,避免这种情况的最简单方法是将一些 UserData 设置为 Body,这些 UserData 将标识要销毁的主体并在 world.step() 调用后直接销毁它们 - 所以而不是 remove() 就这样

body.setUserData("DESTROY");

然后在您的 render 方法中

world.step(timestep, 3, 3);

for(Body b : world.getBodies())
    if("DESTROY".equals(b.getUserData())
        world.destroyBody(body);