Java 多边形的错误原点坐标逻辑

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

我现在在测试项目中所做的,我试图解决这个问题:

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:。在这里我们可以看到,调整大小后,绿色多边形围绕调整屏幕右上角之前的点旋转

下面是一个有这个问题的测试项目

谁能帮忙找出哪里出了问题


谢谢。

您的相机和第一个多边形都位于位置(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);。结果实际上就是我所需要的: