2016-01-21 183 views
1

我遇到了SpriteKit的問題。 我有一個動畫,通過七張照片rund。它顯示了一個單位的瞄準過程。過程完成後,我想開始一個我實施的方法。有沒有人知道我能在行動完成後找出答案?在完成操作後執行某些操作

func shootAnmination(){ 
    var array:[SKTexture] = [] 
    for x in 1...6{ 
     array.append(SKTexture(imageNamed: ("fire" + String(x)))) 
    } 
    let animation = SKAction.animateWithTextures(array, timePerFrame: 0.5) 
    let unitFire = SKAction.repeatAction(animation, count: 1) 

    self.runAction(unitFire) 
} 

回答

1

做的最簡單的事情是使用一個計時器(0.5秒* 7) 像

NSTimer.scheduledTimerWithTimeInterval(3.5, target: self, selector: "timerDidFire:", userInfo: userInfo, repeats: false) 
+1

定時器是一個糟糕的主意,因爲1)它不會立即啓動,有一些延遲會導致定時器失去動畫同步。 2)當您退出應用程序時,需要對其進行管理,並且在處理暫停狀態時進行管理。 3)如果應用程序開始滯後,定時器不會滯後,這可能會導致定時器過早啓動 – Knight0fDragon

+0

你的權利,生病離開它在這裏所以人們c不使用定時器的原因:) – Roee84

1

使用self.runAction與完成塊:這裏是目標C代碼:

[node runAction:moveUp completion:^{ 
    NSLog(@"RUNNING MOVE DOWN"); 
    [node setHidden: NO]; 
    [node runAction: moveDown]; 
}]; 
3

據我知道有沒有辦法找出當一個動作完成,但你可以使用

func runAction(_ action: SKAction, completion block:() -> Void) 

開始你的方法。操作完成後調用完成塊。

+0

這是我會的方法更喜歡使用,唯一的問題就是如果你有一個序列,這個序列的最後不會觸發。 – Knight0fDragon

1

或者你可以使用SKAction.sequence/1和SKAction.runBlock/1到您的重複動作後執行一個動作:

let animation = SKAction.animateWithTextures(array, timePerFrame: 0.5) 
let unitFire = SKAction.repeatAction(animation, count: 1) 
let sequence = SKAction.sequence([unitFire,SKAction.runBlock({() -> Void in 
      // your code 
     })]) 

self.runAction(unitFire)

+0

非常感謝。我使用了這個實現,它只是做它應該做的。 – TorbenVerdorben

相關問題