我在 Cocos2d 中使用 SneakyJoystick,我试图让精灵旋转以面对与操纵杆指向相同的方向(这是自上而下)。
我可以让它旋转以面对它,但它会在每帧左右更新旋转时卡入到位。
如何使精灵平滑地向目标角度旋转,而不跳转到它?我无法弄清楚如何使用 CCRotateTo 做到这一点,因为旋转的角度可能随时改变。
我在 Cocos2d 中使用 SneakyJoystick,我试图让精灵旋转以面对与操纵杆指向相同的方向(这是自上而下)。
我可以让它旋转以面对它,但它会在每帧左右更新旋转时卡入到位。
如何使精灵平滑地向目标角度旋转,而不跳转到它?我无法弄清楚如何使用 CCRotateTo 做到这一点,因为旋转的角度可能随时改变。
我最终通过使用我制作的旋转方法解决了这个问题,该方法在每次更新时以正确的方向旋转节点/精灵。
- (void)rotateNode:(CCNode*)aNode degrees:(float)targetRotation withSpeed:(float)rotationSpeed withTimeDelta:(ccTime)dt
{
rotationSpeed = rotationSpeed * dt;
// Convert the difference between the two angles to radians
float diff = (targetRotation - aNode.rotation) * (M_PI / 180);
// Find the rotation of the vector created by the sin and cos of the difference
float rotationDifference = atan2f(sinf(diff),cosf(diff));
// Rotate the clip accordingly
aNode.rotation += MAX(
MIN(
(180/M_PI) * rotationDifference,rotationSpeed), -rotationSpeed
);
}
你有没有尝试过:
[CCRotateBy actionWithDuration:0.5f angle:CC_DEGREES_TO_RADIANS(90.0f)];
获取上次更新和当前更新之间的角度,如果你想要它让角色有一个设定的转身时间,你可以通过角度来缩放你的持续时间。