[英]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.