【问题标题】:Rotate SpriteNode using shortest angle使用最短角度旋转 SpriteNode
【发布时间】:2014-09-11 20:53:21
【问题描述】:

现在我的代码会旋转 _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]];
}

【问题讨论】:

    标签: ios objective-c rotation sprite-kit skspritenode


    【解决方案1】:

    要将精灵旋转最小角度,请将 shortestUnitArc 添加到 SKAction:

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

    来自 Apple 的文档,

    最短单位弧

    如果是,则旋转在任何一个中执行 方向导致最小的旋转。如果否,则轮换 被插值了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-27
      • 2019-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多