【问题标题】:Libgdx / Physics Editor Rotation of bodyLibgdx / 物理编辑器旋转身体
【发布时间】:2015-08-13 23:11:21
【问题描述】:

祝你有个愉快的夜晚。

我有以下问题:

一个 Box2d 动态主体,带有一个夹具,所有顶点从主体的原点以正 x / y 放置。 http://i.stack.imgur.com/MXQRr.png

但是旋转是在身体原点 0/0 上而不是在质心上..

所以我尝试了这些方法:

1: 在身体中间设置身体的原点(顶点正和负) 问题:旋转有效,Sprite 定位几乎是不可能的

2: 设置海量数据中心 = originOfBody.x + 宽度 / 2,originOfBody.y + 高度 / 2 问题:就像我什么都不做,仍然在 0, 0 处围绕身体原点旋转

在下面的代码 sn-p 中你可以看到我的实例化。

    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 和一些 hack,它可以工作,我对其他对象没有任何问题,因为我不旋转它们。放置就像一个魅力..

我希望我犯一个重大错误.. 通常 box2d 必须自动计算旋转中心(质量中心)?

这次我忍不住了.. :(

【问题讨论】:

    标签: libgdx box2d


    【解决方案1】:

    我建议您采用第一种工作方式。

    将 Body 的原点设置在 body 的中间(顶点为正和 negativ) 问题:旋转有效,Sprite 定位几乎 不可能

    旋转效果很好,但是精灵定位很困难。去年我在制作物理游戏时遇到了同样的问题。帮助我了解定位的确切工作原理。

    Box2D 实体以中心为中心。这意味着调用身体的位置会给你对象的中间。精灵是角落聚焦的,这意味着精灵的位置是它的左下角。因此,您不能将它们中的每一个都设置为相同的东西。我建议将精灵从身体的位置向下和向左分别移动身体高度和宽度的一半。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多