如何在一个函数中同时运行两个enumerateNodes

问题

我想在一个函数中同时运行2个enumerateChildNodes代码。目前,两个枚举代码都有效!

func change() {

scene?.enumerateChildNodes(withName: "//*one*") {
(node, stop) in
node.name = "two"
}

scene?.enumerateChildNodes(withName: "//*two*") {
(node, stop) in
 node.name = "one"
}
}

但是,由于第一个枚举将node.name更改为“两个”,这将触发第二个枚举,并将node.name更改回“一个”。

如何避免这种情况?

我希望该功能按以下方式工作:

当前名称为“两个”的节点,更改为“一个”

当前名称为“一个”的节点,更改为“两个”

谢谢!

罗恩·迈舒克(Ron Myschuk)

据我所知,没有一种方法可以同时运行它们并记住每个状态,并且仅在适用时更改名称。如果它们都是某个子类的对象,则可以在该类中放置一个属性并进行检查属性

func change() {

    scene?.enumerateChildNodes(withName: "//*one*") { (node, stop) in
        if node is SomeInGameSubClass {
            node.isSwapped = true
            node.name = "two"
        }
    }

    scene?.enumerateChildNodes(withName: "//*two*") { (node, stop) in
        if node is SomeInGameSubClass {
            if !node.isSwapped {
                node.name = "one"
            }
            else {
                node.isSwapped = false
            }
        }
    }
}

或仅将第一个集合转换为任意名称,然后转换第二个集合,然后返回并再次转换第一个集合

func change() {

    scene?.enumerateChildNodes(withName: "//*one*") { (node, stop) in
        node.name = "temp"
    }

    scene?.enumerateChildNodes(withName: "//*two*") { (node, stop) in
        node.name = "one"
    }

    scene?.enumerateChildNodes(withName: "//*temp*") { (node, stop) in
        node.name = "two"
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章