簡體   English   中英

使用Polygonshape創建夾具時,Box2D引發錯誤

[英]Box2D throws error when creating fixture with Polygonshape

我使用libGDX。 當我在Box2D中嘗試創建具有多邊形形狀的燈具時,出現以下錯誤:

java: ./Box2D/Collision/b2Distance.h:103: const b2Vec2& b2DistanceProxy::GetVertex(int32) const: Assertion `0 <= index && index < m_count' failed.

當我不執行Box2D的world.step() ,我不再收到此錯誤。

所以我注釋掉了WorldContactListener中的所有內容,然后再次添加了world.step()。

我仍然遇到相同的錯誤。

當我將多邊形替換為圓形時,一切正常。 所以這就是我創建多邊形的方式:

 PolygonShape shape = new PolygonShape();

 float ppm = Game.PixelsPerMeter;

 Vector2[] vertices = new Vector2[3];

 vertices[0] = new Vector2(0f/ppm  , 0f  );
 vertices[1] = new Vector2(1/ppm , 1f/ppm  );
 vertices[2] = new Vector2(0f/ppm ,1f/ppm);

 shape.set(vertices);

這就是我如何在Box2D世界中添加所有內容:

    float ppm = Game.PixelsPerMeter

    BodyDef bdef = new BodyDef();
    bdef.position.set(100/ ppm,  200/ ppm);
    bdef.type = BodyDef.BodyType.DynamicBody;

    b2dbody = world.createBody(bdef);

    FixtureDef mainFdef = new FixtureDef();


    mainFdef.shape = Shape; //this is the shape from above of course
    b2dbody.createFixture(mainFdef).setUserData(this);

如果您能告訴我怎么了,我將非常高興!

謝謝

更多的猜測,但您的ppm轉換是否正確? 1 / ppm(您表示為75)給出的值很小。 我沒有深入研究box2d代碼的內容,但是當以米為單位定義對象時,這種方法最有效,因此創建一個頂點為0,0和0,0.0133(1cm)的多邊形可能會“混淆它”(表示某種舍入錯誤或代碼中的某處,因此它無法區分頂點,並認為其中至少有3個。)

例如,具有3個版本的頂點代碼的裸機應用程序會在前2個版本(較小的值)上產生運行時異常,但對於較大的值不會產生運行時異常:

/*  Version 1 (your code) - Runtime error
vertices[0] = new Vector2(0f/ppm  , 0f  );
vertices[1] = new Vector2(1f/ppm , 1f/ppm  );
vertices[2] = new Vector2(0f/ppm ,1f/ppm);
*/

/* Version 2 (your actual values) - Runtime error
vertices[0] = new Vector2(0f  , 0f  );
vertices[1] = new Vector2(0.0133f , .0133f  );
vertices[2] = new Vector2(0f , 0.0133f);
*/

/* Version 3 (larger values) - No error
vertices[0] = new Vector2(0f  , 0f  );
vertices[1] = new Vector2(1f , 1f  );
vertices[2] = new Vector2(0f ,1f);
*/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM