在远离指定位置的地方创建多边形,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。
好的,所以我想我可能以一种不雅的方式解决了这个问题。我所做的是:
- 围绕原点创建多边形点
- 获取多边形的AABB中心和质心(不一定相同)
- 平移点以使 AABB 以形状中心为中心,因此可以根据此而不是质心绘制图像。
代码需要大量清理,但它似乎工作得很好,更新了 github 存储库中的代码,谢谢!
变化基本上是将点从原始质心转换为 AABB 中心:
for(int i = 0; i < pts.length - 1; i += 2) {
pts[i] -= aabbCenter.x;
pts[i + 1] -= aabbCenter.y;
}
我一直在 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。
好的,所以我想我可能以一种不雅的方式解决了这个问题。我所做的是:
- 围绕原点创建多边形点
- 获取多边形的AABB中心和质心(不一定相同)
- 平移点以使 AABB 以形状中心为中心,因此可以根据此而不是质心绘制图像。
代码需要大量清理,但它似乎工作得很好,更新了 github 存储库中的代码,谢谢!
变化基本上是将点从原始质心转换为 AABB 中心:
for(int i = 0; i < pts.length - 1; i += 2) {
pts[i] -= aabbCenter.x;
pts[i + 1] -= aabbCenter.y;
}