满足if语句与enumerateChildNodesWithName的所有节点

时间:2014-11-24 05:23:44

标签: swift sprite-kit velocity enumeration

我正在构建一个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)")
}

1 个答案:

答案 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导致枚举停止,因为在这种情况下 剩下的迭代不会再改变结果了。