等到 属性 为真后再继续循环
Wait until property is true before continuing loop
尝试做一些我觉得应该很简单的事情,但到目前为止我没有尝试过。我试图阻止此循环继续,直到敌人的 属性 设置为 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)
}
}
如果我明白你想做什么,那么你应该使用递归而不是循环。
首先您需要创建一些 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)
}
该算法将获取数组中的每个对象,并对它们执行某些操作,只有在完成前一项后才会移动到下一项。
尝试做一些我觉得应该很简单的事情,但到目前为止我没有尝试过。我试图阻止此循环继续,直到敌人的 属性 设置为 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)
}
}
如果我明白你想做什么,那么你应该使用递归而不是循环。
首先您需要创建一些 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)
}
该算法将获取数组中的每个对象,并对它们执行某些操作,只有在完成前一项后才会移动到下一项。