2017-01-15 28 views
4

異なるノード間のやり取りの開発中に、ノードから特定のアクションリストを削除する必要があることがわかりました。明らかに私のノードで実行されているすべてのアクションは、その識別のためのString鍵を持っているSKNodeからSKActionの特定のリストを削除する

Sprite-Kitフレームワークの 現在のバージョンでは、として、いくつかのインスタンスメソッドを提供します。 だから私は、私はSKNode延長作ら、removeAllActionと非常に類似していた何かを考えた:

public extension SKNode { 
    func removeAllAction(in list:[String]) { 
     list.forEach { if self.action(forKey: $0) != nil { self.action(forKey: $0)?.speed = 0.0; self.removeAction(forKey: $0)}} 
    } 
} 

をとして私のプロジェクトで、私はそれを使用することができます:コードはうまく機能

let actionList = ["idle_walk_sx","idle_walk_dx","walk_dx","walk_sx","walk_idle_sx","walk_idle_dx","rotate_sx_dx","rotate_dx_sx"] 
self.removeAllAction(in: actionList) 

。 は、しかし、私は二つの要因について本当によく分からない:

  • (ゼロ)speed修正の有効性は、私はそれが 適切な繰り返しのアクションの顔にそれを導入する考え。奇妙なことを避けるためにそれを取り除かなければならないのですか?
  • 削除するリストが同じ 子供にこの拡張機能を拡張する(拡張する)ことはどうですか?
+0

、あなたが上で、速度を設定しているか、そしてなぜですか? – Confused

+1

'speed = 0'は必要ありません。アクションを削除するとすぐに実行されるため、evaluateActionsフェーズでは呼び出されません。また、 'forEach'があなたのためにカウント0を処理するので、' if list.count> 0'も必要ではありません。 – Knight0fDragon

+0

@ Knight0fDragon良い点、私は同意します。 –

答えて

1

私はコメントに同意します。子ノードにコード+スキャンが何かのようになることができるように、おそらくspeedは必要ありません。

public extension SKNode { 
    func removeAllAction(in list:[String]) { 
     list.forEach { if self.action(forKey: $0) != nil { self.removeAction(forKey: $0)}} 
     self.children 
      .filter { $0.hasActions() } 
      .forEach { $0.removeAllAction(in: list) } 
    } 
} 
関連する問題