2017-01-15 55 views
4

刪除SKAction的具體名單在不同節點之間的一些互動的發展,我意識到我需要從一個節點上刪除特定的操作列表。 Sprite-Kit框架的當前版本提供了一些實例方法爲:從SKNode

顯然,每一個在我的節點上運行有其標識中String關鍵作用。 所以我想的東西,是非常相似的removeAllAction,然後我做了SKNode擴展:

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

速度= 0不需要,當你移除一個動作時,它是立即的,所以在evaluateActions階段它不會被調用。另外,'如果不需要list.count> 0'以及自'forEach'會照顧數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) } 
    } 
}