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);
我目前正在使用 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);