Java 多边形的错误原点坐标逻辑
我现在在测试项目中所做的,我试图解决这个问题: 2多边形对象 2个角色,每个角色包含一个多边形对象 1个带演员的数组,我在“渲染方法”中使用ShaperEnder绘制多边形来遍历它 1台正交摄影机 一期 1屏幕视口 接下来的逻辑是:我在0,0处创建具有相同大小和相同位置的多边形1和多边形2 比我设置位置(Gdx.graphics.getWidth()/2,Gdx.graphics.getWidth()/2)更有效。然后在X轴上将一个多边形平移50像素,然后运行setOrigin(Gdx.graphics.getWidth()/2,Gdx.graphics.getWidth()/2)。我为第一个多边形添加了InputListener,当我点击它时,我用第二个多边形旋转第二个演员。我的相机有Y型。在旋转时,第二个多边形认为他的原点是屏幕的右上角,并围绕它旋转 以下是结果的详细信息和gif: 并计划其行为: 下面是我最大化窗口时其行为的gif:。在这里我们可以看到,调整大小后,绿色多边形围绕调整屏幕右上角之前的点旋转 下面是一个有这个问题的测试项目 谁能帮忙找出哪里出了问题Java 多边形的错误原点坐标逻辑,java,libgdx,Java,Libgdx,我现在在测试项目中所做的,我试图解决这个问题: 2多边形对象 2个角色,每个角色包含一个多边形对象 1个带演员的数组,我在“渲染方法”中使用ShaperEnder绘制多边形来遍历它 1台正交摄影机 一期 1屏幕视口 接下来的逻辑是:我在0,0处创建具有相同大小和相同位置的多边形1和多边形2 比我设置位置(Gdx.graphics.getWidth()/2,Gdx.graphics.getWidth()/2)更有效。然后在X轴上将一个多边形平移50像素,然后运行setOrigin(Gdx.grap
谢谢。您的相机和第一个多边形都位于位置(0,0) 您的相机与屏幕大小相同。因此:
setOrigin(Gdx.graphics.getWidth()/2, Gdx.graphics.getWidth()/2);
将点设置为其右上角
camera.position.set(Gdx.graphics.getWidth()/2, Gdx.graphics.getWidth()/2);
如果你想把这个点放在中间,那么这样设置:
setOrigin(0, 0);
或者,您可以保留原点,只需移动相机即可。所以世界原点在它的左下角
camera.position.set(Gdx.graphics.getWidth()/2, Gdx.graphics.getWidth()/2);
您似乎误用了
setOrigin
方法。在PolygonRotation.java
中的代码中:
public void create () {
float w = Gdx.graphics.getWidth();
float h = Gdx.graphics.getHeight();
//...
p1.setVertices(getVertices(0, 0, 20, 5));
p2.setVertices(getVertices(0, 0, 20, 5));
pActor pa1 = new pActor();
pActor pa2 = new pActor();
actors.add(pa1);
actors.add(pa2);
//...
pa1.setPosition(w/2, h/2);
//...
pa2.setPosition(pa1.getX(), pa1.getY());
//...
pa2.setOrigin(pa1.getX(), pa1.getY()); // <-- This line
//...
drawViewportBox(w, h);
}
public void create(){
float w=Gdx.graphics.getWidth();
float h=Gdx.graphics.getHeight();
//...
p1.集合顶点(集合顶点(0,0,20,5));
p2.集合顶点(集合顶点(0,0,20,5));
pActor pa1=新pActor();
pActor pa2=新pActor();
添加(第1页);
添加(第2页);
//...
pa1.设置位置(w/2,h/2);
//...
pa2.setPosition(pa1.getX(),pa1.getY());
//...
pa2.setOrigin(pa1.getX(),pa1.getY());//我的代码中的相机在左下角有坐标(它甚至在API文档中为正交相机编写).用户CodingHamster提到,我需要使用的不是精确的坐标点,而是从原点0,0偏移到该点,似乎这个想法有意义。似乎合乎逻辑,我在代码中添加了下一个更改:在我的actor方法setPosition中,我在setOrigin末尾添加了下一行(oldOriginX-(x-oldX),oldOriginY-(y-oldY));在我的演员的moveBy中,我在最后一行添加了setOrigin(-x,-y);。结果实际上就是我所需要的: