Rotar un objeto en su dirección de movimiento

¿Existe una forma relativamente simple de rotar SKSpriteNode para que siempre esté orientado en la dirección en que se mueve? Mi clase Gamescene tiene un sistema de objetos con sus cuerpos físicos relativos que aplican impulsos entre sí cuando chocan. Esto hace que sea relativamente difícil hacer un seguimiento de exactamente en qué dirección se mueve un objeto. Algunos de los objetos tampoco tienen una forma regular, lo que hace que las cosas sean un poco más caóticas. Lo he probado con la trigonometría (por ejemplo, arcotangente), pero solo funciona según lo previsto en circunstancias muy especiales. ¿Podría haber una manera de averiguar el ángulo de la trayectoria de un SKSpriteNode, de modo que pueda rotar el objeto a ese ángulo? ¡Gracias por cualquier ayuda que usted nos pueda proporcionar!

EDITAR:

Creé una extensión para CGVector e intenté rotar el SKSpriteNode en la dirección de su velocidad (Gracias a 0x141E por la idea) una vez que dos objetos colisionaron, pero parece que no funciona correctamente

func didBeginContact(contact: SKPhysicsContact) {
    var firstBody : SKPhysicsBody = contact.bodyA
    var secondBody : SKPhysicsBody = contact.bodyB
    if ((firstBody.categoryBitMask == PhysicsCatagory.Blade) && (secondBody.categoryBitMask == PhysicsCatagory.Laser))
    {
        if (secondBody.node != nil)
        {
            if (saberAngle <= 0 && LCR == 1) // Blade pointing right
            {
                let rebound = CGVectorMake(-reboundStrength*sin(1.5707 + saberAngle), reboundStrength*cos(1.5707 + saberAngle))
                secondBody.applyImpulse(rebound)
            }
            else if (saberAngle > 0 && LCR == -1) // Blade pointing left
            {
                let rebound = CGVectorMake(reboundStrength*sin(1.5707 - saberAngle), reboundStrength*cos(1.5707 - saberAngle))
                secondBody.applyImpulse(rebound)
            }
            if (secondBody.velocity.speed() > 0.01){
                (secondBody.node as! SKSpriteNode).zRotation = secondBody.velocity.angle() - offset
            }
        }
    }
}

No lo hice en el método didSimulatePhysics () porque habría momentos en que el nodo que estaba tratando de rotar no existiría, y obtendría errores como "Uso del identificador no resuelto 'sprite'"

EDITAR:

Lo hice funcionar simplemente creando y ejecutando una acción llamada rotar que gira el sprite a secondBody.velocity.angle () - offset, pero todavía tengo curiosidad por saber por qué mi código no estaba funcionando antes ^^

Respuestas a la pregunta(1)

Su respuesta a la pregunta