如何在libgdx中通过中心点旋转图像角色?

21

如果我理解正确的话,LibGDX是通过使用addActions方法来旋转图像的:

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

问题在于,图像正在被 点=(0,0) 旋转。

我的问题是:

是否有一种方法可以将图像按对象的 中心点 旋转?就像把它钉在中间,然后像车轮一样转动它? rotateByrotateTo 方法都是以图像本身的 (0,0) 点旋转。

4个回答

32

您需要正确设置角色的“原点”位置。从Actor API中可以了解到,该原点相对于位置而言,并用于缩放和旋转。

因此,请计算出您的中心点,并将原点设置为中心点。

Actor a;
....
a.setOrigin(a.getWidth()/2, a.getHeight()/2);

那是最简单的解决方案。我只是在roll_onto_screen()方法中将原点设置在Actor内部。谢谢大家! - Peter Poliwoda
如果我需要持续旋转一个演员或一组演员怎么办? - ManishSB
你只需要将rotateAction包装到repeatAction中,然后将repeatAction设置为角色的Action。 - Kedu

5
我找到的最简单和最短的设置起点的方法是调用以下函数:
Actor a;

...

a.setOrigin(Align.center);

4
这里是如何在libgdx中旋转角色的简单方法。
首先,你需要设置原点:
img.setorigin(width/2,hieght/2);

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

img.rotate(2f);

或者

img.rotate(-2f);

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

这将导致您的对象在原地以其中心点旋转。看起来很复杂,但实际上相当高效,特别是如果您能够直接使用将驱动这些方法的矩阵(变换)。

moveTo(320, 100, 0.5f) 方法被用来将图像移动到地图上的点 x=320 y=100。我不确定该如何转换对象 - Peter Poliwoda
请注意,这是我第一次接触libGDX :-) 我正在修改我上面的答案。 - Matt Stevens

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接