簡體   English   中英

錯誤:嘗試添加已有父級的SKNode

[英]Error: Attemped to add a SKNode which already has a parent

我正在使用Swift 3和SpriteKit進行游戲,我正在嘗試聲明一個全局變量,以便在其余的GameScene類中使用它,但我不能。 我做了什么:

class GameScene: SKScene {

    ...
    let personaje = SKSpriteNode(imageNamed: "Ball2.png")
    ...

在全局聲明之后,我試圖在sceneDidLoad中使用它,就像那樣:

...
personaje.position = CGPoint.zero
addChild(personaje)
...

我不知道為什么但Xcode會返回此錯誤:

***由於未捕獲的異常'NSInvalidArgumentException'終止應用程序,原因:'嘗試添加已經有父名稱的SKNode:名稱:'(null)'紋理:['Ball2.png'(150 x 146)]位置: {0,0}比例:{1.00,1.00}大小:{150,146}錨:{0.5,0.5}旋轉:0.00'

提前感謝您的想法和解決方案!

我懷疑你試圖添加一個已經擁有父節點的SKNode,這是不可能的。

在將節點添加到新節點之前,從普通父節點中刪除該節點:

personaje.removeFromParent();
addChild(personaje)

或創建一個新節點:

let newPersonaje = SKSpriteNode(imageNamed: "Ball2.png")
addChild(newPersonaje)

該錯誤表示您無法添加已擁有父級的SKNode 當您將personaje節點聲明為場景的屬性時,您可以在場景中的任何位置引用它,但您只需將其添加到場景一次。

如果需要再次添加,則必須先將其從父項中刪除:

personaje.removeFromParent()
addChild(personaje)

正如在其他答案中所解釋的那樣,您已聲明並初始化了一個var,因此無需添加到當前類,因為它已經添加。

而不是這種語法(如果你不需要因為getter只讀屬性而改變你的精靈),你也可以寫:

var personaje : SKSpriteNode! {
        get {
            return SKSpriteNode(imageNamed: "Ball2.png")
        }
}

// you can also use only one line for convenience:
// var personaje : SKSpriteNode! { get { return SKSpriteNode(imageNamed: "Ball2.png")} }

override func didMove(to view: SKView) {
        addChild(personaje)
}

使用此代碼,您可以聲明全局變量,但只有在將其添加到類時才會通過getter模式進行初始化。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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