4
다른 노드 간의 일부 상호 작용 개발 중에 노드에서 특정 작업 목록을 제거해야한다는 것을 알게되었습니다. Sprite-Kit
프레임 워크의 현재 버전은 일부 인스턴스 메소드를 제공합니다 : SKNode에서 특정 SKAction 목록 제거
- removeAllActions()
- action(forKey key: String)
- hasActions() 분명히 내 노드에서 실행하는 자사의 식별을위한
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
보정의 효과가, 나는 그것이 적절한 반복 행동의 얼굴에 소개 생각했다. 괴롭히지 않거나 그대로두면 제거해야합니까? - 동일한 확장명을 가진 어린이 (예 : )에게이 확장 기능을 확장 (확장)하는 것이 어떻게 가능합니까?
- (제로)에
당신이에 속도를 설정하는 것, 그 이유는 무엇입니까? – Confused
'speed = 0'은 필요하지 않습니다. 동작을 제거하면 즉각적이므로 evaluateActions 단계에서 호출되지 않습니다. 또한'forEach'가 0을 처리 할 것이기 때문에'if list.count> 0'도 필요하지 않습니다. – Knight0fDragon
@ Knight0fDragon 좋은 지적입니다. –