1

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

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

我的班级扩展了雪碧。我没有覆盖 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
4

1 回答 1

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 版本,那么您所得到的可能是正确的。

于 2013-05-18T16:57:37.023 回答