2013-05-09 88 views
1

我想旋转一个对象,从旋转时改变的一个点。AndEngine setRotationCenter移动旋转的对象

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

我的类扩展了Sprite。 我不是重写setRotationCenter。 我的AndEngine版本没有更新很久。

我发布了我正在做的和我得到的数字的日志。所有应该没看着他们,但我其实seing我的对象在屏幕沿着向量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 

回答

7

这是正常现象。 setRotationCenter更改对象旋转的点。最初你的物体旋转30度到150,150左右,但你要告诉它在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版本,那么你得到的可能是正确的。

+0

感谢您的回答,以及关于GLES2-AnchorCenter的评论。我不再使用RotationCenter,现在我将其保留为0并手动计算所有旋转。更容易计算碰撞并将触摸事件转换为屏幕坐标 – 2013-05-18 19:43:59