如何保持SKNode的轮换计数

时间:2014-03-03 04:34:44

标签: objective-c sprite sprite-kit game-physics sknode

我试图想出一种累积SKNode旋转的方法。例如,如果一个节点在山上滚动(圆形物理体),我想知道它已经进行了多少次旋转,或者是一个累积的角度。我需要它在单向旋转时递增并递减另一个。

我曾想过跟踪节点的zRotation以及每次更新时更新计数,当它从> 0转到<0时,但这看起来很糟糕,因为我必须提出某种范围来检查并且它可能会错过快速旋转节点或低帧速率的旋转。

任何建议都很棒!

编辑:这是我的解决方案,它完全符合我的目的

-(void)update:(CFTimeInterval)currentTime {
    //get CurrentAngle (-pi to pi)
    float currentAngle = _wheelSprite.zRotation;
    if (currentAngle<0) {
        //change angle format (0 to M_PI*2)
        currentAngle+=M_PI*2;
    }

    //calculate angle change
    float change = currentAngle - _lastAngle;
    if (change>M_PI) {
        change-=2*M_PI;
    }else if (change<-M_PI){
        change+=2*M_PI;
    }

    //update last angle
    _lastAngle = currentAngle;

    //update actualWheelAngle
    _actualWheelAngle += change;
}

1 个答案:

答案 0 :(得分:3)

我要做的是创建一个变量,该变量随着每帧zRotation的变化而递增/递减。然后将该值除以360将为您提供旋转量。