【问题标题】:Rotate a polygon box2d body keeping the initial position旋转保持初始位置的多边形 box2d 主体
【发布时间】:2014-06-04 07:32:12
【问题描述】:

下图举例说明了我正在尝试做的事情。多边形主体应旋转保持其初始位置,而红点(也可能是另一个主体)保持在中心。

这是我尝试过的,但是它会在红点附近移动:

        Vector2 position = body2.getWorldCenter();
        body2.setTransform(position, body2.getAngle() + 0.01f);

有什么想法吗?

更新 1

这是创建多边形主体的方法:

private Body createPolygonBody(Vector2 pos) {
    // 0. Create a loader for the file saved from the editor.
    BodyEditorLoader loader = new BodyEditorLoader(Gdx.files.internal("shot/wall"));

    // 1. Create a BodyDef, as usual.
    BodyDef bd = new BodyDef();
    bd.position.set(pos);
    bd.type = BodyType.StaticBody;

    // 2. Create a FixtureDef, as usual.
    FixtureDef fd = new FixtureDef();
    fd.density = 1;
    fd.friction = 0.5f;
    fd.restitution = 0.3f;
    fd.filter.categoryBits = CATEGORY_SCENERY;
    fd.filter.maskBits = MASK_SCENERY;

    // 3. Create a Body, as usual.
    Body body = world.createBody(bd); 


    // 4. Create the body fixture automatically by using the loader.
    loader.attachFixture(body, "one_door",fd, 3f);

    return body;
}

【问题讨论】:

  • 为此,您必须定义多边形形状相对于红点中心的点。你能发布创建身体的代码吗?
  • 感谢@DennisKorbar 对此的关注。我已经更新了帖子。我使用 Aurilien 的“Physics Body Editor”来生成顶点。
  • 不幸的是我不知道那个编辑器。该文件是否包含多边形的坐标?您基本上要做的是确保坐标相对于点 (0,0)。然后将身体准确定位在红色圆圈上。
  • @DennisKorbar 是的,编辑器生成坐标并且可以相对于点生成坐标。感谢您指出这种可能性,它现在按预期工作。如果您想放弃答案,我可以接受...
  • 太棒了!我已经制定了来自 cmets 的信息作为答案。

标签: box2d


【解决方案1】:

您必须生成相对于要旋转的点的多边形。

这是你必须做的:

  • 相对于点 (0,0) 创建多边形
  • 将身体准确地放在红点的中心

那么旋转应该可以按您的意愿进行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-07
    • 1970-01-01
    • 1970-01-01
    • 2017-11-14
    • 1970-01-01
    • 1970-01-01
    • 2012-08-10
    • 2012-11-03
    相关资源
    最近更新 更多