我一直在谷歌寻找解决方案没有成功,我正在为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测试的。
提前致谢!
答案 0 :(得分:0)
在我看来,就像你将形状定位在中心点而不是身体上。形状的中心应为0,0,而不是center.x,y。夹具位置相对于身体。
答案 1 :(得分:0)
代码需要大量清理,但它似乎工作得很好,在github repo中更新代码,谢谢!
这一变化基本上是从原始质心到AABB中心的转换点:
for(int i = 0; i < pts.length - 1; i += 2) {
pts[i] -= aabbCenter.x;
pts[i + 1] -= aabbCenter.y;
}