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)];
最後の更新と現在の更新の間の角度を取得します。また、キャラクターが向きを変える時間を設定できるようにする必要がある場合は、角度の量で期間をスケーリングできます。