这段代码的问题在于它只针对名为“coin”的1个SKNode,我想要定位所有名为“coin”的SKNode。我不知道怎么做......
继承我所拥有的:
func killCoins(){
let skcoin: SKNode = self.childNodeWithName("coin")!
// Looks for a SKNode named "coin".
let coinsprite: SKSpriteNode = (skcoin as? SKSpriteNode)!
// Converts the SKNode into a SKSpriteNode
coinsprite.removeFromParent()
// Kills Sprite
}
答案 0 :(得分:3)
要移除多个SKSpriteNode
,请遍历所有子项并删除名为SKSpriteNode
的{{1}}个。
"coin"
答案 1 :(得分:0)
作为vacawama答案的补充,您可以enumerateChildNodesWithName:usingBlock:使用more advanced searches:
self.enumerateChildNodesWithName("coin") {
node, stop in
// do something with node or stop
}
来自文档:
此方法按顺序枚举子数组,搜索节点 其名称与搜索参数匹配。该块被调用一次 与name参数匹配的每个节点。
答案 2 :(得分:0)
您可以查找名称为SKSpriteNode(s)
的所有孩子coin
。以下代码完全是面向功能编程的
func killCoins() {
self
.children
.filter { $0 is SKSpriteNode && $0.name == "coin" }
.forEach { $0.removeFromParent() }
}
此操作的时间为O(n)
,其中n
是当前节点/场景的子项总数。
我们可以做得更好。
只需创建一个特殊节点,该节点将成为所有硬币的父节点
override func didMoveToView(view: SKView) {
let coins = SKNode()
coins.name = "coins"
self.addChild(coins)
let coin0 = SKSpriteNode(imageNamed: "coin")
coins.addChild(coin0)
let coin1 = SKSpriteNode(imageNamed: "coin")
coins.addChild(coin1)
}
现在killCoins
变为
func killCoins() {
self.childNodeWithName("coins")?.removeAllChildren()
}
此操作的时间复杂度为O(m)
,其中m
是硬币的数量。