远离指定位置创建多边形,LibGDX

时间:2015-12-05 17:09:47

标签: java libgdx box2d

我一直在谷歌寻找解决方案没有成功,我正在为LibGDX中的Box2D创建一个小型库(只是一个包装器),我正在为每个主体绘制一个纹理,以Body.getPosition为基础()vector,但是,我看到polygon的getPosition()与CircleShapes和wall(使用setAsBox()方法创建的)不同。

这是一张图片:

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

红点是质心,青色圆是body.getPosition()给出的几何中心(右?),你可以看到我可以根据位置,旋转和角度调整纹理。缩放但多边形不会发生这种情况(使用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课程在这里:https://github.com/tavuntu/tabox2d

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

提前致谢!

2 个答案:

答案 0 :(得分:0)

在我看来,就像你将形状定位在中心点而不是身体上。形状的中心应为0,0,而不是center.x,y。夹具位置相对于身体。

答案 1 :(得分:0)

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

  1. 在原点附近创建多边形点
  2. 获取多边形和质心的AABB中心(不一定相同)
  3. 翻译点以使AABB居中于形状中心,因此可以相对于此而不是质心绘制图像。
  4. 代码需要大量清理,但它似乎工作得很好,在github repo中更新代码,谢谢!

    这一变化基本上是从原始质心到AABB中心的转换点:

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