Gire el sprite al tacto con una velocidad de rotación limitada.

Estoy tratando de hacer que mi spriteNode gire sobre el toque del dedo.

Hasta ahora puedo hacerlo, pero lo que quiero es que mi nodo tenga una "velocidad de rotación". Entonces calculo la longitud del ángulo y luego establezco un tiempo diferente para rotar con él (si el arco es largo, tomará tiempo ...).

Aquí está mi código:

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")
    }
}

El principal problema es que agregar variosSKAction al nodo bloquear el movimiento.

Me gustaría saber cuál podría ser la solución. Si es posible usando SKAction, ya que me gustaría evitar hacer una actualización en cada cuadro para calcular el movimiento (pero si es la única solución ...)

NOTA DESPUÉS DE RESPUESTA

Cuando recibí respuestas, volví a leer la documentación de SpriteKit y encontréesta nota clara :

Cuándo no debes usar acciones

Aunque las acciones son eficientes, crearlas y ejecutarlas tiene un costo. Si está realizando cambios en las propiedades de un nodo en cada cuadro de animación y esos cambios necesitan ser recalculados en cada cuadro, es mejor que realice los cambios en el nodo directamente y no utilice acciones para hacerlo. Para obtener más información sobre dónde puede hacer esto en su juego, consulte Procesamiento avanzado de escenas.

Respuestas a la pregunta(4)

Su respuesta a la pregunta