Вращение спрайта Cocos2d для соответствия джойстику - PullRequest
0 голосов
/ 05 декабря 2011

Я использую SneakyJoystick в Cocos2d, и я пытаюсь заставить спрайт вращаться в том же направлении, что и джойстик (это сверху вниз).

Я могу получить егоповернуть лицом к нему, но он встанет на свое место, так как вращение обновляется каждый кадр или около того.

Как я могу заставить спрайт плавно вращаться в направлении целевого угла, не выпрыгивая на него?Я не смог понять, как это сделать с помощью CCRotateTo, потому что угол поворота в сторону может измениться в любое время.

Ответы [ 2 ]

1 голос
/ 06 декабря 2011

Я решил исправить это, просто используя метод вращения, который вращает узел / спрайт в правильном направлении с правильной суммой при каждом обновлении.

- (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
                         );
}
0 голосов
/ 05 декабря 2011

Вы пробовали:

[CCRotateBy actionWithDuration:0.5f angle:CC_DEGREES_TO_RADIANS(90.0f)];

Получение угла между последним обновлением текущего обновления, также, если вы хотите, чтобы у персонажа было установленное время для поворота, вы можете масштабировать свою продолжительность на величину угла.

...