내가 느끼는 일을 시도하는 것은 간단해야하지만 지금까지 시도한 것은 아무것도 없습니다. 적에 대한 속성이 true로 설정 될 때까지이 루프가 계속되는 것을 방지하려고합니다.
내 적 노드는 걷기 상태에서 플레이어의 경로를 알아냅니다. 경로가 계산 될 때까지 다음 적으로 반복하고 싶지 않습니다. 내 적 노드에는 걷기 상태에서 true로 설정 한 pathComplete 노드가 있습니다.
이것은 터치로 실행됩니다.
for node:AnyObject in self.children {
if node is EnemyNode {
let enemy = node as! EnemyNode
enemy.destination = coordinate
enemy.stateMachine.enterState(WalkingState)
}
}
내가 무엇을 하려는지 이해한다면 루프 대신 재귀를 사용해야합니다.
먼저 필요한 enemyNodeArray
개체를 포함 할 일부를 만들어야 합니다.
그런 다음 다음과 같이 두 가지 기능을 만들 수 있습니다.
func actionForObjectWithIndex(index: Int, completion block: (nextIndex: Int) -> Void) {
guard index >= 0 && index < enemyNodeArray.count else {
return
}
// do what you need with object in array like enemyNodeArray[index]...
...
// Then call completion
block(nextIndex: index + 1)
}
func makeActionWithIndex(index: Int) {
actionForObjectWithIndex(index, completion: {(nextIndex: Int) -> Void in
self.makeActionWithIndex(nextIndex)
})
}
다음과 같이 사용하십시오.
if !enemyNodeArray.isEmpty {
makeActionWithIndex(0)
}
이 알고리즘은 배열의 모든 개체를 가져 와서 특정 작업을 수행하며 이전 항목이 완료된 후에 만 다음 항목으로 이동합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다