簡體   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