AndEngine setRotationCenter移动旋转的对象

时间:2013-05-09 10:49:55

标签: java android rotation andengine

我正在尝试从旋转时正在变化的一个点旋转对象。

当我调用setRotationCenter(float,float)时,对象的IMAGE移动到某个任意点。这只发生在旋转的对象上,我的意思是,如果我在一个旋转= 0的对象中调用setRotationCenter,一切都运行良好。

My Class扩展了Sprite。 我没有覆盖setRotationCenter。 我的AndEngine版本没有更新。

我发布了我正在做的事情和我得到的数字的日志。所有人都应该看着它们,但我实际上是在屏幕上沿着矢量v(1,1)移动我的物体(注意这是旋转中心的增量)

log item touch event previous rotation 30.0
log item touch event previous rotation center 150.0: 150.0
log item touch event previous position 100.0: 150.0
log item touch event CALL TO setRotationCenter(151.0,151.0);
log item touch event current rotation 30.0
log item touch event current rotation center 151.0: 151.0
log item touch event current position 100.0: 150.0

log item touch event previous rotation 30.0
log item touch event previous rotation center 151.0: 151.0
log item touch event previous position 100.0: 150.0
log item touch event CALL TO setRotationCenter(152.0,152.0);
log item touch event current rotation 30.0
log item touch event current rotation center 152.0: 152.0
log item touch event current position 100.0: 150.0

1 个答案:

答案 0 :(得分:7)

这是预期的行为。 setRotationCenter更改了对象旋转的点。最初你的物体在150,150左右旋转30度,但是你告诉它在151,151左右旋转30度。物体的旋转角度将继续看起来完全相同,但由于它现在围绕不同的点旋转,它似乎已经移动。

如果您从一个零旋转的对象开始,以下两个代码段将使它最终处于相同的位置:

object.setRotationCenter(150, 150);
object.setRotation(30);
object.setRotationCenter(151, 151);

object.setRotationCenter(151, 151);
object.setRotation(30);

请注意,如果您使用的是AndEngine的GLES2-AnchorCenter版本,则setRotationCenter的参数通常应在0.0到1.0的范围内,因为它们是对象宽度/高度的一部分。即setRotationCenter(0.5f, 0.5f)会使对象围绕其中心旋转。但如果您使用的是GLES2版本,那么您所拥有的可能是正确的。