我使用AndEngine和Box2d扩展,当我的游戏加载它的地图时,有时会崩溃(是的,有时只是。它对我来说看起来很随意)这就是跟踪的样子:
#00 pc 00014480 /data/app-lib/com.sergio.game-2/libandenginephysicsbox2dextension.so (b2Body::CreateFixture(b2FixtureDef const*)+8)
#01 pc 0000c408 /data/app-lib/com.sergio.game-2/libandenginephysicsbox2dextension.so (Java_com_badlogic_gdx_physics_box2d_Body_jniCreateFixture__JJFFFZSSS+112)
#02 pc 0001dbcc /system/lib/libdvm.so (dvmPlatformInvoke+112)
#03 pc 0004e123 /system/lib/libdvm.so (dvmCallJNIMethod(unsigned int const*, JValue*, Method const*, Thread*)+398)
#04 pc 00000214 /dev/ashmem/dalvik-jit-code-cache (deleted)
它不会告诉我到底在哪里崩溃,我不知道在哪里看。我像往常一样创造身体和固定装置:
FixtureDef wallfixture = PhysicsFactory.createFixtureDef(0, 0, 0.2f);
wallfixture.filter.categoryBits = CATEGORY_WALL;
wallfixture.filter.maskBits = MASK_WALL;
final Body theBody = PhysicsFactory.createBoxBody(mPhysicsWorld, greenRectangle, BodyType.StaticBody, wallfixture);
有什么想法吗?
答案 0 :(得分:1)
根据我的经验,box2d中的灯具经常出现几个问题:
检查所有灯具是否始终数学这些规则。看起来你是随机生成灯具,有时候某些灯具在描述的意义上变得无效。
答案 1 :(得分:0)
经过大量的工作,我发现了问题所在。我希望这可以帮助人们解决这个问题。 我正在更新线程之外创建实体,这似乎不行。所以我通过将所有主体创建放在Update线程上来修复它,如下所示:
mEngine.runOnUpdateThread(new Runnable() {
@Override
public void run() {
...
FixtureDef wallfixture = PhysicsFactory.createFixtureDef(0, 0, 0.2f);
wallfixture.filter.categoryBits = CATEGORY_WALL;
wallfixture.filter.maskBits = MASK_WALL;
final Body theBody = PhysicsFactory.createBoxBody(mPhysicsWorld, greenRectangle, BodyType.StaticBody, wallfixture);
...
}
}