我现在在测试项目中有什么,我尝试解决这个问题:
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
的测试项目任何人都可以帮忙找出问题所在吗?
谢谢。
答案 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);
答案 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/2
,h/2
)。
然后为第二个多边形设置w/2
,h/2
的原点,该第二个多边形与其当前位置相加并等于w
和h
。换句话说,原点设置在屏幕的右上角,显然就是这种情况。