簡體   English   中英

使用Swift在SpriteKit中復制()節點

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM