2017-01-05 13 views
2

ノードクマが2つあります(グループ内)。アクションbearmoveはループ上にありますが、moveUpはそうではありません。moveUPは一度しか起こりません。swift:どのスキークションがグループ内で停止したのかを検出します。

let moveUp=SKAction.moveTo(y:50,duration:1.0) 
let bearAnimate=[SKTexture(imageNamed:"image1"),SKTexture(imageNamed:"image2"),SKTexture(imageNamed:"image3"),SKTexture(imageNamed:"image2")] 

let bearmove=SKAction.animate(with: bearAnimate,timePerFrame:0.3) 
let bearRep=SKAction.repeatForever(bearmove) 

let bearRun = SKAction.group([moveUp, bearRep]) 
bear.run(bearRun) 

moveUpがいつ実行完了/停止したかを知りたい。私は試しました:

しかし、bearAnimateはループ上にあり、決して停止しません。このコード行は決して読み込まれません。グループ内のアクションの1つを検出する方法はありますか?

+1

拡張機能とキーを使ってアクションが終了したときを知り、何かをする方法です:http://stackoverflow.com/a/37722911/2109038これは@Mark Brownswordの非常にエレガントでシンプルなテクニックよりも複雑です。 – Confused

+0

@ ConfusedこれはCindy Smithの助けにならないでしょう。あなたが提供したのは、ノードがキーを使ってアクションを実行しているときに、Cindyがアクショングループの一部として個々のアクションをいつ完了するかを知る必要があるということです。 – Knight0fDragon

+0

グループ内のアクションの補完ハンドラが呼び出されますか? @ Knight0fDragon – Confused

答えて

3

移動後に何が起こるのかを処理する別のアクションを作成してから、これらのアクションをシーケンスとして実行することができます。

let afterMoveHandler = SKAction.runBlock({ 
    // Your code here 
}) 

let moveSequence = SKAction.sequence([moveUp, afterMoveHandler]) 
let bearRun = SKAction.group([moveSequence, bearRep]) 

あなたが探しているものを行うためにSKActionの延長をしたい場合は、次の点を考慮し
(コードスウィフトある3)

extension SKAction 
{ 
    static func run(action:SKAction,completion:()->()) -> SKAction 
    { 
     return SKAction.sequence([action, SKAction.run(completion)] 
    } 

} 

使用法:ここ

let moveUpEvent = SKAction.run(action:moveUp){/*do something here*/} 
let bearRun = SKAction.group([moveUpEvent , bearRep]) 
+0

あなたは気にしないで、私はあなたの答えの延長を追加しました – Knight0fDragon

+0

ありがとう!これは本当に助けになった! –

関連する問題