我试图从一个点旋转一个对象,该点在旋转时会发生变化。
当我调用 setRotationCenter(float,float) 时,对象的图像移动到某个任意点。这只发生在旋转的对象上,我的意思是,如果我在旋转 = 0 的对象中调用 setRotationCenter,一切正常。
我的类扩展了 Sprite。 我没有覆盖 setRotationCenter。 我的AndEngine版本好久没更新了。
我发布了我正在做的事情和我得到的数字的日志。看着它们一切都应该没问题,但我实际上是在屏幕上看到我的对象沿着 vector 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
最佳答案
这是预期的行为。 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 的范围内,因为它们是对象宽度/高度的比例。 IE。 setRotationCenter(0.5f, 0.5f)
将使对象围绕其中心旋转。但如果您使用的是 GLES2 版本,那么您得到的可能是正确的。
关于java - AndEngine setRotationCenter 移动旋转的物体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16459999/