我在Swift
中使用copy()
的节点制作了副本
例如:
var copy = original.copy() as! SKSpriteNode)
这很好用。
我的问题是,当我想删除原始节点(使用removeFromParent)时,我还想自动删除复制节点。
我该怎么做?我制作了一个2D太空射击游戏(像Defender),我在Radarcam中使用了复制节点。
感谢。
答案 0 :(得分:1)
非常简单的解决方案,使节点成为父节点和副本的父节点,然后在不再需要时删除父节点。
答案 1 :(得分:0)
您可以定义这样的类来跟踪节点之间的链接(如 Paulw11 所示)。
final class LinkedNodes {
static let shared = LinkedNodes()
private var links: [(SKNode, SKNode)] = []
private init() { }
func link(nodeA: SKNode, to nodeB: SKNode) {
let pair = (nodeA, nodeB)
links.append(pair)
}
func removeNodesLinked(to node: SKNode) {
let linkedNodes = links.reduce(Set<SKNode>()) { (res, pair) -> Set<SKNode> in
var res = res
if pair.0 == node {
res.insert(pair.1)
}
if pair.1 == node {
res.insert(pair.0)
}
return res
}
linkedNodes.forEach { $0.removeFromParent() }
links = links.filter { $0.0 != node && $0.1 != node }
}
}
现在只需记住在复制节点时创建链接
let copy = original.copy() as! SKSpriteNode)
LinkedNodes.shared.link(nodeA: original, to: copy)
现在您可以删除写入
的给定节点的所有链接节点LinkedNodes.shared.removeNodesLinked(to: original)