和一个愉快的夜晚。
我遇到以下问题:
一个Box2d动态体,其中一个夹具的所有顶点都放置在身体原点的正位x / y处。 http://i.stack.imgur.com/MXQRr.png
但是旋转在身体原点0/0上而不是在质心中。
所以我尝试了这些方法:
1: 设置身体中间的身体原点(顶点正面和负面) 问题:旋转工作,Sprite定位几乎不可能
2: 设置海量数据中心= originOfBody.x + width / 2,originOfBody.y + height / 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(?)的Body Physics Editor和一些有效的黑客,我对其他对象没有任何问题,因为我不旋转它们。放置就像一个魅力..
我希望我做一个重大错误。通常box2d必须自动计算旋转中心(质量中心)?
这次我不能帮助自己.. :(
答案 0 :(得分:1)
我建议你采用第一种方法。
在身体中间设置身体的原点(顶点为正和 negativ)问题:旋转工作,Sprite定位差不多 不可能
旋转工作正常,但精灵定位很困难。我去年制作一个物理游戏时遇到了同样的问题。是什么帮助我确切了解定位的工作原理。
Box2D机构以中心为中心。这意味着调用正文的位置会给你对象的中间位置。精灵是角落聚焦的,这意味着精灵的位置是它的左下角。因此,您不能将它们中的每一个都设置为相同的东西。我建议将精灵从身体的位置向下和向左移动身体高度和宽度的一半。