Поверните SpriteNode, используя кратчайший угол

Прямо сейчас мой код поворачивает _eye, чтобы посмотреть на _me, но когда _eye поворачивается с 359 градусов на 1 градус, он не поворачивается, переходя на 359 -> 0 -> 1, а идет на 359 -> 358 -> .. -> 2 - > 1.

#define SK_DEGREES_TO_RADIANS(__ANGLE__) ((__ANGLE__) * 0.01745329252f)
#define SK_RADIANS_TO_DEGREES(__ANGLE__) ((__ANGLE__) * 57.29577951f)

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    for (UITouch *touch in touches)
    {
        CGPoint location = [touch locationInNode:self];
        [_me runAction:[SKAction moveTo:location duration:0.5]];
    }
}

-(void)update:(CFTimeInterval)currentTime
{
    float deltaX = _me.position.x - _eye.position.x;
    float deltaY = _me.position.y - _eye.position.y;
    float angle = atan2f(deltaY, deltaX);

    [_eye runAction:[SKAction rotateToAngle:angle - SK_DEGREES_TO_RADIANS(90.0f) duration:0.2]];
}

person Konrad Wright    schedule 11.09.2014    source источник


Ответы (1)


Чтобы повернуть спрайт на наименьший угол, добавьте shortestUnitArc в SKAction:

[_eye runAction:[SKAction rotateToAngle:angle - SK_DEGREES_TO_RADIANS(90.0f) duration:0.2 shortestUnitArc:YES]];

Из документации Apple,

самая короткая UnitArc

Если YES, то вращение выполняется в том направлении, которое приводит к наименьшему вращению. Если НЕТ, то вращение интерполируется.

person 0x141E    schedule 11.09.2014