还有一个美好的夜晚。
我有以下问题:
一个Box2d动态体,带有一个夹具,所有顶点从体的原点以位置x/y放置。http://i.stack.imgur.com/MXQRr.png
但是旋转是在身体原点0/0上,而不是在质量中心。
所以我尝试了以下方法:
1:将身体的原点设置在身体的中间(顶点正负) 问题:旋转工作,精灵定位几乎是不可能的
2:设置海量数据中心=原点Body.x宽度/ 2,原点Body.y高度/ 2问题:就像我什么都不做,仍然围绕原点0,0旋转
在下面的代码片段中,您可以看到我的实例化。
BodyDef bodyDef = new BodyDef();
bodyDef.type = BodyDef.BodyType.DynamicBody;
bodyDef.position.set(new Vector2(200, 2));
body = world.createBody(bodyDef);
FixtureDef fixtureDef = new FixtureDef();
fixtureDef.density = 0.6f;
fixtureDef.friction = 0.4f;
fixtureDef.restitution = 0.2f;
bodyLoader.attachFixture(body, "Rocket1n2", fixtureDef, WIDTH);
originOfBody = bodyLoader.getOrigin("Rocket1n2", WIDTH);
MassData data = body.getMassData();
data.center.set(Box2DUtils.getWidth(body) / 2, 0);
data.I = body.getMassData().I; //without this line programm fails with assertion
body.setMassData(data);
Vector2 cpy = data.center.cpy();
我用下面的代码旋转播放器:
body.setAngularVelocity(addition); //addition is predefined(atm 1 / -1)
我目前使用aurelia(?)的身体物理编辑器与一些黑客工作,我对其他对象没有任何问题,因为我不旋转它们。放置就像一个魅力。
我希望我犯了一个重大错误…通常box2d必须自动计算旋转中心(质量中心)?
这次我身不由己。:(
我建议你用第一种方法工作。
将身体的原点设置在身体的中间(顶点正负)问题:旋转工作,精灵定位几乎是不可能的
旋转效果很好,但精灵定位很困难。去年我在做物理游戏时也遇到了同样的问题。帮助我的是看清楚定位是如何工作的。
Box2D主体是中心聚焦的。也就是说,调用物体的位置,会得到物体的中间。精灵是角聚焦的,这意味着精灵的位置是它的左下角。因此,你不能把它们都设定为一样的东西。我建议将精灵从身体的位置向下向左移动身体高度和宽度的一半。