首页 > 解决方案 > enumerateChildNodes 是否对孙子进行排序?

问题描述

我没有使用物理体来检测碰撞,而是简单地使用 enumerateChildNodes 来检查 SKSpriteNodes 是否相交。当 SKSpriteNodes 都是场景的孩子时,它对我很有用,但当 SKSpriteNodes 之一是孙子时,它就不起作用了。我尝试在 SKSpriteNode 的名称之前使用 // 和 / 来搜索所有树,但它没有帮助。这是我的代码:

override func didMove(to view: SKView) {

    let red = SKSpriteNode(color: UIColor.redColor(), size: CGSizeMake(10,10))
    red.name = "red"
    self.addChild(red)

    let blue = SKSpriteNode(color: UIColor.blueColor(), size: CGSizeMake(10,10))
    blue.name = "blue"
    self.addChild(blue)

    let green = SKSpriteNode(color: UIColor.greenColor(), size: CGSizeMake(10,10))
    green.name = "green"
    blue.addChild(green)

}
override func update(_ currentTime: TimeInterval) {

    enumerateChildNodes(withName:"red") {node, _ in 
        let red = node as! SKSpriteNode
        if red.frame.intersects((self.childNode(withName:"//blue/green")?.frame)!) 
            { 
             red.removeFromParent() 
            }

}

标签: swiftsprite-kit

解决方案


为什么不只是在进行检查时引用蓝色的孩子而不是循环遍历所有层次结构

if red.frame.intersects((blue.childNode(withName: "green")?.frame)!) { 
    red.removeFromParent() 
}

推荐阅读