簡體   English   中英

嘗試添加已存在父錯誤的SKNode

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

我收到錯誤:“試圖在嘗試運行我的游戲時嘗試添加已經擁有父項的SKNode”。

如果我將SKSpriteNode本地添加到函數中,它運行正常。 但是當我嘗試全局聲明它時,我得到了那個錯誤。 任何幫助解決此錯誤都會很棒。 我假設它與self.bee.removeFromParent()但我無法讓它工作。

讓bee = SKSpriteNode(imageNamed:“Bee”)

runAction(SKAction.repeatActionForever(
    SKAction.sequence([
        SKAction.runBlock(addBee),
        SKAction.waitForDuration(0.5)
        ])
    ))

func addBee(){

bee.name = "Bee"
let actualY = random(min: 0, max: size.height+bee.size.height ) // random

bee.position = CGPoint(x: size.width + bee.size.width/2, y: actualY)
self.addChild(bee)

let slopeToPlayer = (bee.position.y - player.position.y) / (bee.position.x - player.position.x)
let constant = bee.position.y - slopeToPlayer * bee.position.x

let finalX : CGFloat = bee.position.x < player.position.x ? 500.0 : -500.0 // Set it to somewhere outside screen size

let finalY = constant +  slopeToPlayer * finalX

let distance = (bee.position.y - finalY) * (bee.position.y - finalY) + (bee.position.x - finalX) * (bee.position.x - finalX)
let beeSpeed = random(min: CGFloat(50), max: CGFloat(150))
let timeToCoverDistance = sqrt(distance) / beeSpeed

let moveAction = SKAction.moveTo(CGPointMake(finalX, finalY), duration: NSTimeInterval(timeToCoverDistance))
let removeAction = SKAction.runBlock { () -> Void in
    self.bee.removeFromParent()
}
bee.runAction(SKAction.sequence([moveAction,removeAction]))

}

您不能兩次添加同一個SKNode的單個實例。 這就像說一個人可以同時存在於兩個地方。 當您在addBee函數范圍之外全局創建Bee node ,您試圖一次又一次地添加相同的Bee實例。

如果要添加多個節點,則應創建單獨的節點實例。 這就是在函數中從本地創建它們的原因。

func addBee() {

    let bee = SKSpriteNode(imageNamed: "Bee")
    bee.name = "Bee"
    addChild(bee)
}

獲取碰撞節點的參考。

func didBeginContact(contact: SKPhysicsContact) {

    var bodyA : SKPhysicsBody!
    var bodyB : SKPhysicsBody!

    if contact.bodyA.categoryBitMask < contact.bodyB.categoryBitMask
    {
        bodyA = contact.bodyA!
        bodyB = contact.bodyB!
    }
    else
    {
        bodyB = contact.bodyA!
        bodyA = contact.bodyB!
    }

    // The two nodes that have collided
    let node1 = bodyA.node 
    let node2 = bodyB.node

}

暫無
暫無

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

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