20

如果我理解正确,LibGDX 正在使用 addActions 方法旋转图像:

this.addAction( parallel(rotateBy(360, 0.5f), moveTo(320, 100, 0.5f)));

问题是,它被图像的point=(0,0)旋转 。

这是我的问题:

有没有办法通过对象的中心点旋转图像?比如把它钉在中间,然后像汽车的轮子一样转动它?rotateBy和rotateTo方法都将其旋转图像本身的 (0,0) 点。

4

4 回答 4

31

您必须正确设置演员的“原点”。您可以从 Actor API 中读取,原点是相对于位置的,用于缩放和旋转。

所以,计算你的中点,并将原点设置为中点。

Actor a;
....
a.setOrigin(a.getWidth()/2, a.getHeight()/2);
于 2012-12-18T13:48:39.680 回答
5

我发现设置原点的最简单和最短的方法是调用:

Actor a;

...

a.setOrigin(Align.center);
于 2017-06-05T11:18:32.123 回答
4

最简单的方法是平移对象,使 0,0 点为中心,旋转它,然后将其平移回原位。我不熟悉 libGDX,但应该有一种方法可以聚合三个转换,这意味着您只将一个聚合转换应用于您的对象。请记住,您聚合转换的顺序会有所不同。

提供完全相同结果的更复杂的方法是计算旋转产生的偏移量并将图像转换回其原点。不要这样做。结合三个简单的变换是可行的方法,也是使用变换的最佳理由之一。

** 编辑查看API,Actor 对象有一个 translate() 方法。使用它来移动图像,使 0,0 点位于中心。在伪代码中;

x = this.getX();
y = this.getY();
cx = this.getWidth() * .5;
cy = this.getHeight() * .5;
this.translate(-(x+cx), -(y+cy)); // move so 0,0 is the centre of the Actor object
this.rotate(thisMuch);  // rotate the Actor
this.translate((x+cx), (y+cy)); // move it back to its original location

这将导致您的对象在其中心点当场旋转。它看起来很复杂,但在实践中非常有效,如果您能够直接使用将驱动这些方法的矩阵(变换),则更是如此。

于 2012-12-17T20:49:07.780 回答
4

这是如何在 libgdx 中旋转演员的简单方法。

首先,您需要设置原点:

img.setorigin(width/2,hieght/2);

现在您可以根据需要顺时针和逆时针旋转:

img.rotate(2f);

或者

img.rotate(-2f);
于 2014-05-20T06:15:29.220 回答