我正在构建一个sprite kit游戏,在我的更新方法中,我有一些if语句检查节点速度。我遇到的问题是声明检查x和y速度是否等于0.在游戏中有3个球体,我正在检查速度。现在,如果if语句找到至少1个x和y速度等于0的orb,则满足此if语句 - 但是我希望它只在所有orbs满足语句时执行。
我该怎么做呢?提前谢谢!
override func update(currentTime: CFTimeInterval) {
centerOrbs()
orbLayer.enumerateChildNodesWithName("player", usingBlock: { node, _ in
if let orb = node as? Orb {
orb.checkObjects()
let rotation1 = orb.physicsBody?.velocity.dy
let rotation2 = orb.physicsBody?.velocity.dx
orb.zRotation = atan2(rotation1!, rotation2!)
if (orb.physicsBody?.velocity.dx == 0 && orb.physicsBody?.velocity.dy == 0) {
self.compareOrbPositions()
}
if (orb.physicsBody?.velocity.dx != 0 || orb.physicsBody?.velocity.dy != 0) {
self.waitForOrbsToStop()
}
}
})
let count = String(moveCount)
moveCountLabel.text = NSString(string: "Moves: \(count)")
}
答案 0 :(得分:1)
您应该更新枚举循环中的布尔变量并检查结果 在枚举所有节点之后:
var allVelocitiesAreZero = true
orbLayer.enumerateChildNodesWithName("player", usingBlock: { node, stop in
// ...
if (orb.physicsBody?.velocity.dx != 0 || orb.physicsBody?.velocity.dy != 0) {
allVelocitiesAreZero = false
stop.memory = true
}
})
if allVelocitiesAreZero {
// ...
}
stop.memory = true
导致枚举停止,因为在这种情况下
剩下的迭代不会再改变结果了。