Is there a relatively simple way to rotate SKSpriteNode so that it is always facing the direction it is moving? My class Gamescene has a system of objects with their relative physicsbodies that apply impulses on each other when they collide. This makes it relatively difficult to keep track of exactly what direction an object is moving in. Some of the objects are also not regularly shaped, which makes things a bit more chaotic. I have tried using trigonometry (e.g. arctangent), but it only works as intended in very special circumstances. Might there be a way to find out the angle of an SKSpriteNode's trajectory, so that I can rotate the object to that angle? Thanks for any help you can provide!
EDIT:
I created an extension for CGVector and tried to rotate the SKSpriteNode in the direction of its velocity (Thanks to 0x141E for the idea) once two objects collided, but it doesn't seem to be working properly
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
}
}
}
}
I didn't do it in the didSimulatePhysics() method because there would be times when the node I was trying to rotate would not exist, and I would get errors like "Use of unresolved identifier 'sprite'"
EDIT:
I got it to work by simply creating and running an action called rotate that rotates the sprite to secondBody.velocity.angle() - offset, but I'm still curious as to why my code wasn't working before ^^
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…