如何改变质心?

时间:2012-02-15 11:06:35

标签: android box2d andengine

我正在尝试

MassData md = mBody.getMassData();
md.center.set(2f, 0); mBody.setMassData(md);

但这不能正常运作。帮我正确地做到这一点。 我想在身体的下半部分增加一点重量。

1 个答案:

答案 0 :(得分:0)

您不想直接改变质量,而是想要在身体底部添加额外的固定装置。你可以这样做,例如像这样(这是一个片段,不是完整的代码;创建纹理,场景等)。

Sprite sprite = new Sprite(CAMERA_WIDTH / 2, CAMERA_HEIGHT / 2, 32, 32, mDTextureRegion, vbom);

Body body = PhysicsFactory.createCircleBody(mPhysicsWorld, sprite, BodyType.DynamicBody, PhysicsFactory.createFixtureDef(0.5f, 0.5f, 0.5f)); // create a simple circle body from the sprite
scene.attachChild(sprite);
Debug.i("ORIG MASS Y: " + body.getMassData().center.y); // this is just generated info
FixtureDef fd = PhysicsFactory.createFixtureDef(10f, 1f, 1f, true); // high density fixture; it is a sensor, i.e. it won't affect collisions
CircleShape cs = new CircleShape(); 
cs.setRadius(0.1f); // make it very small
fd.shape = cs;
cs.setPosition(new Vector2(0, -0.5f)); // attach below the current centre

body.createFixture(fd); // attach to body
Debug.i("NEW MASS Y: " + mDBody.getMassData().center.y); // the generated info changed

mPhysicsWorld.registerPhysicsConnector(new PhysicsConnector(sprite, body, true, true)); 

此示例主体的行为类似于spintop,它将尝试重新定位自身,以便精灵的底部接触地面。当你旋转它时,它会再次尝试到达那个位置。