繁体   English   中英

具有AndEngine异常创建夹具的Box2d

[英]Box2d with AndEngine exception creating fixture

我将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);

任何想法?

根据我的经验,box2d中的灯具经常出现以下问题:

  1. 无效的缠绕顺序;
  2. 不凸多边形;
  3. 形状尺寸太小。 当几个点之间的距离太短时,box2d假定它们是一个点。 这就是为什么box2d可以将三角形解释为直线的原因(例如,多边形必须至少具有3个点)是不可接受的。

检查您所有的灯具是否总是符合这些规则。 看起来您是在随机生成固定装置,有时某些固定装置在描述的意义上会失效。

经过大量工作,我发现了问题所在。 我希望这可以帮助这个问题的人。 我在更新线程之外创建主体,这似乎不行。 因此,我通过将所有主体创建都放在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);
          ...
     }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM