尝试做一些我认为应该简单的事情,但到目前为止我没有尝试过任何工作。我试图阻止这个循环继续,直到我的敌人的属性设置为true。
我的敌人节点在步行状态期间计算出玩家的路径。我不想迭代到下一个敌人,直到计算出路径。我的敌人节点有一个pathComplete节点,我在步行状态期间设置为true。
这是在触摸时执行的。
for node:AnyObject in self.children {
if node is EnemyNode {
let enemy = node as! EnemyNode
enemy.destination = coordinate
enemy.stateMachine.enterState(WalkingState)
}
}
答案 0 :(得分:1)
如果我理解你想做什么,那么你应该使用递归而不是循环。
首先,您需要创建一些包含您需要的对象的QuestionList.prototype.getNextQuestion = function (question) {
return this.questions[this.counter++];
}
questionList.getNextQuestion(); // "is 1 = 1 ?"
questionList.getNextQuestion(); // "is 1 = 2 ?"
。
然后你可以制作两个这样的函数:
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)
})
}
此算法将获取数组中的每个对象,并使用它们执行某些操作,并且只有在完成前一个项目后才会移动到下一个项目。