Вращайте спрайт на ощупь с ограниченной скоростью вращения

Я пытаюсь заставить мой spriteNode вращаться при прикосновении пальца.

Пока я могу это сделать, но я хочу, чтобы у моего узла была «скорость вращения». Поэтому я вычисляю длину угла, а затем устанавливаю другое время для поворота с ним (если дуга длинная, потребуется время ...).

Вот мой код:

override func touchesMoved(touches: NSSet, withEvent event: UIEvent) {
    _isTouched = true
    for touch in touches {
        let location:CGVector = touch.locationInNode(self) - miner.position

        miner.weaponRotation = location.angle() - CGFloat(M_PI_2)
    }
}

var wantedRotation: CGFloat {
    get { return _wantedRotation }
    set(rotation) {
        if rotation > CGFloat(M_PI) || rotation < -CGFloat(M_PI) {
            _wantedRotation = CGFloat(M_PI) + rotation % CGFloat(M_PI)
        }
        else {
            _wantedRotation = rotation
        }

        removeActionForKey("rotation")
        let arc: CGFloat = CGFloat(abs(_wantedRotation - zRotation))
        let shortestArc: CGFloat = min(arc, CGFloat(M_PI * 2.0) - arc)
        runAction(SKAction.rotateToAngle(_wantedRotation, duration: NSTimeInterval(shortestArc / CGFloat(M_PI) * rotationSpeed), shortestUnitArc: true), withKey: "rotation")
    }
}

Основная проблема заключается в том, что добавление несколькихSKAction к узлу блокируют движение.

Я хотел бы знать, что может быть решением? Если возможно, используя SKAction, так как я хотел бы избежать обновления каждого кадра для расчета движения (но если это единственное решение ...)

ПРИМЕЧАНИЕ ПОСЛЕ ОТВЕТА

Когда я получил ответы, я снова прочитал документацию SpriteKit и нашелэто четкое примечание :

Когда вы не должны использовать действия

Хотя действия эффективны, их создание и выполнение сопряжены с определенными затратами. Если вы вносите изменения в свойства узла в каждом кадре анимации, и эти изменения необходимо пересчитывать в каждом кадре, то лучше вносить изменения в узел напрямую, а не использовать действия для этого. Для получения дополнительной информации о том, где вы можете сделать это в своей игре, см. Advanced Scene Processing.

Ответы на вопрос(4)

Ваш ответ на вопрос