[英]Copy() node in SpriteKit with Swift
我已經在Swift中使用copy()
從節點制作了一個副本
例如:
var copy = original.copy() as! SKSpriteNode)
而且效果很好。
我的問題是,當我想刪除原始節點(使用removeFromParent)時,我也想自動刪除復制節點。
我怎么做? 我制作了一個2D太空射擊游戲(例如Defender),並在Radarcam中使用了復制節點。
謝謝。
您可以定義一個這樣的類來跟蹤節點之間的鏈接(如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)
非常簡單的解決方案,使節點既可以作為原始節點也可以作為副本節點的父節點,然后在不再需要時刪除父節點。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.