这应该是一个简单的问题,希望能快速得到答案。 :) 我正在使用 box2d 进行我正在做的侧滚动项目。一切顺利,谢谢您的询问。 :D 无论如何,我的角色需要使用不同大小的盒子作为边界。我以为这就像在车身上添加一个新的固定装置一样简单,但它不起作用。它崩溃了,我得到了这个:
java: ./Box2D/Collision/b2Distance.h:103: const b2Vec2& b2DistanceProxy::GetVertex(int32) const: Assertion `0 <= index && index < m_count' failed.
我不知道这意味着什么。这是我用来创建主体和固定装置的代码:
BodyDef bodyDef = new BodyDef();
bodyDef.type = BodyType.DynamicBody;
bodyDef.position.set(level.character.position);
Body body = b2world.createBody(bodyDef);
level.character.body = body;
PolygonShape polygonShapeHead = new PolygonShape();
origin.x = level.character.circleBoundOrigin.x * 2.0f;
origin.y = level.character.circleBoundOrigin.y * 3.0f;
polygonShapeHead.setAsBox(level.character.circleBoundOrigin.x,
level.character.circleBoundOrigin.y, origin, 0);
FixtureDef fixtureDefHead = new FixtureDef();
fixtureDefHead.shape = polygonShapeHead;
fixtureDefHead.friction = level.character.friction.x;
body.createFixture(fixtureDefHead);
polygonShapeHead.dispose();
PolygonShape polygonShapeBod = new PolygonShape();
origin = level.character.rectBoundOrigin;
polygonShapeHead.setAsBox(level.character.rectBoundOrigin.x,
level.character.rectBoundOrigin.y, origin, 0);
FixtureDef fixtureDefBod = new FixtureDef();
fixtureDefBod.shape = polygonShapeBod;
fixtureDefBod.friction = level.character.friction.x;
body.createFixture(fixtureDefBod);
polygonShapeBod.dispose();
据我所知,我做的一切都是正确的。那么为什么它不起作用呢?为什么会崩溃?我正在使用fixturedef。这可能是问题所在吗?谢谢!
最佳答案
当您在 world.step() 期间添加/销毁对象时会发生这种情况。如果您要动态添加/销毁对象,则需要将它们排队并确保在调用 world.step() 之前或之后进行更改
本教程系列对此进行了讨论。 http://youtu.be/ACQaU2Vr1ao?t=15m26s
关于java - 使用多个夹具时 Box2D 程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23121131/