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

时间:2014-10-09 08:48:43

标签: java libgdx

我现在在测试项目中有什么,我尝试解决这个问题:

2个多边形对象

2个演员,每个演员都包含一个多边形对象

带有actor的1个数组,我在render方法中运行它并使用shapeRenderer绘制多边形

1 OrthographicCamera

1阶段

1 ScreenViewport

接下来是逻辑:我创建了多边形1和多边形2,其大小和位置相同,位于0,0。

比我做setPosition(Gdx.graphics.getWidth()/ 2,Gdx.graphics.getWidth()/ 2)。比我在X轴上将一个多边形翻译50个像素并运行setOrigin(Gdx.graphics.getWidth()/ 2,Gdx.graphics.getWidth()/ 2)。我为第一个多边形添加了InputListener,当我点击它时,我在第二个多边形的第二个actor上进行rotateBy。我的相机有Y-Up。在旋转时,第二个多边形会认为他的原点位于屏幕的右上角并围绕它旋转。

这是结果的GIF:http://i.imgur.com/CDzqTta.gif

并规划其行为方式:http://i.imgur.com/dCB0HDX.jpg

如果我最大化窗口,这里是gif的行为:http://i.imgur.com/6ZKn33d.gif。在这里我们可以看到,在调整大小后,绿色多边形会围绕调整屏幕右上角之前的点旋转。

以下是此问题https://www.dropbox.com/s/ti2iiwm2cbom62f/polygonRotation.zip?dl=0

的测试项目

任何人都可以帮忙找出问题所在吗?

谢谢。

2 个答案:

答案 0 :(得分:1)

您的相机和第一个多边形都位于(0,0)的位置。

您的相机尺寸与屏幕相同。所以:

setOrigin(Gdx.graphics.getWidth()/2, Gdx.graphics.getWidth()/2);

将点设置在右上角。

如果你想让点在中间,那么设置如下:

setOrigin(0, 0);

或者,您可以保留原点,只需移动相机即可。所以世界起源在它的左下角。

camera.position.set(Gdx.graphics.getWidth()/2, Gdx.graphics.getWidth()/2);

enter image description here

答案 1 :(得分:1)

您好像滥用了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);
}

原点不是多边形中心的坐标,而是与它的偏移。

根据您的代码,两个多边形都位于屏幕的中心(w/2h/2)。

然后为第二个多边形设置w/2h/2的原点,该第二个多边形与其当前位置相加并等于wh。换句话说,原点设置在屏幕的右上角,显然就是这种情况。