在远离指定位置的地方创建多边形,LibGDX

Polygon is created far away the specified position, LibGDX

我一直在 google 中寻找解决方案但没有成功,我正在为 LibGDX 中的 Box2D 创建一个小型库(只是一个包装器)并且我正在为每个 body,以 Body.getPosition() 向量为基础,但是,我看到多边形的 getPosition() 与 CircleShapes 和墙壁(使用 setAsBox() 方法创建)不同。

这是一张图片:

http://i.stack.imgur.com/NzooG.png

红色点是质心,青色圆圈是body.getPosition()给出的几何中心(对吧?),如你所见,我可以使纹理适应body 在位置、旋转和缩放方面,但这不会发生在多边形上(使用 setAsBox() 制作的除外)。

基本上,我想要的是在正多边形的AABB中心得到青色圆圈。这是一个可运行的例子:

import com.badlogic.gdx.ApplicationAdapter;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.math.Vector2;

public class MyGdxGame extends ApplicationAdapter {

Tabox2D t;
float w ,h;
@Override
public void create () {
    w = Gdx.graphics.getWidth();
    h = Gdx.graphics.getHeight();
    t = Tabox2D.getInstance();
    t.debug = true;

    t.newBall("d", 100, 200, 25);// Ball.
    t.newBox("s", 10, 10, w - 20, 50);// Floor.
    t.newHeptagon("d", new Vector2(200, 200), 40);
}

@Override
public void render () {
    Gdx.gl.glClearColor(0, 0, 0, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
    t.update(0);// Don't move anything just to see the cyan circle.
    t.draw();
}
}

Tabox2D class 在这里:https://github.com/tavuntu/tabox2d

注意:这是使用最新版本的 Android Studio 和 LibGDX 进行测试的。

提前致谢!

在我看来,您将形状定位在中心点上,而不是 body。形状的中心应该是 0,0,而不是 center.x,y。夹具位置是相对于body。

好的,所以我想我可能以一种不雅的方式解决了这个问题。我所做的是:

  1. 围绕原点创建多边形点
  2. 获取多边形的AABB中心和质心(不一定相同)
  3. 平移点以使 AABB 以形状中心为中心,因此可以根据此而不是质心绘制图像。

代码需要大量清理,但它似乎工作得很好,更新了 github 存储库中的代码,谢谢!

变化基本上是将点从原始质心转换为 AABB 中心:

for(int i = 0; i < pts.length - 1; i += 2) {
        pts[i] -= aabbCenter.x;
        pts[i + 1] -= aabbCenter.y;
    }