我在我的GameScene类中有以下代码,它将所有移动的精灵定向到他们前进的方向。如果从update()调用它可以很好地工作,但我无法理解为什么它从didEndContact调用时根本不起作用。
从update()调用的问题是,当场景转换开始时,不再调用更新(似乎)并且所有精灵停止定位它们自己。我有很长的场景转换,所以看起来很糟糕。
func updateSpriteDirections(){
var i = 1
var nodeToUpdate: SKSpriteNode?
nodeToUpdate = self.childNodeWithName("sprite\(i)") as! SKSpriteNode!
while (nodeToUpdate != nil){
changeSpriteDirection(nodeToUpdate!)
i += 1
nodeToUpdate = self.childNodeWithName("sprite\(i)") as! SKSpriteNode!
}
func didEndContact(contact: SKPhysicsContact) {
updateSpriteDirections()
}
override func update(currentTime: CFTimeInterval) {
updateSpriteDirections()
}
func changeSpriteDirection(sprite: SKSpriteNode){
let nodeToTurn = self.childNodeWithName(sprite.name!)
if(nodeToTurn != nil) {
let angle = atan2(sprite.physicsBody!.velocity.dy, sprite.physicsBody!.velocity.dx)
nodeToTurn!.zRotation = angle - 90 * DegreesToRadians
}
}