簡體   English   中英

Swift 2,SpriteKit,我無法從父節點刪除節點

[英]Swift 2, SpriteKit, I'm having trouble removing a node from parent

我是Swift的新手,如果這令人困惑,請原諒我。

我試圖讓我的節點之一“番石榴”在“忍者”與之碰撞時消失。

目前,我的代碼是在我的createScene()函數中設置的,如下所示:

        func spawnGuava(){

        //The way the Guava spawn and move

        let guavaNode = SKNode()

        let guava = SKSpriteNode(texture: guavaNodeTexture)

        guava.setScale(0.75)
        guava.position = CGPointMake (self.size.width + 160, self.size.height * 0.05)
        guava.physicsBody = SKPhysicsBody(rectangleOfSize: guava.size)
        guava.physicsBody?.affectedByGravity = false
        guava.physicsBody?.dynamic = true
        guava.alpha = 0.75
        guava.physicsBody?.categoryBitMask = PhysicsCatagory.Guava
        guava.physicsBody?.collisionBitMask = PhysicsCatagory.None
        guava.physicsBody?.contactTestBitMask = PhysicsCatagory.Ninja

        guava.zPosition = 0

        guavaNode.addChild(guava)


        guava.runAction(GuavaMoveAndRemove)

        self.addChild(guavaNode)

        func ninjaAteGuava(ninja: SKSpriteNode, guava: SKSpriteNode){

            guavaNode.removeFromParent()

        }

        func didCollideWithGuava(contact: SKPhysicsContact){
            var firstBody: SKPhysicsBody
            var secondBody: SKPhysicsBody

            if contact.bodyA.categoryBitMask < contact.bodyB.categoryBitMask{
                firstBody = contact.bodyA
                secondBody = contact.bodyB
            }
            else{
                firstBody = contact.bodyB
                secondBody = contact.bodyA
            }

            if ((firstBody.categoryBitMask & PhysicsCatagory.Guava != 0) && (secondBody.categoryBitMask & PhysicsCatagory.Ninja != 0)) {
                ninjaAteGuava(firstBody.node as! SKSpriteNode, guava: secondBody.node as! SKSpriteNode)

            }
        }

這是有關忍者的一些信息

  let ninjaTexture = SKTexture(imageNamed:"ninja")
    ninjaTexture.filteringMode = SKTextureFilteringMode.Nearest

    ninja = SKSpriteNode(texture: NinjaTexture)
    ninja.setScale(0.5)
    ninja.position = CGPoint(x: self.frame.size.width * 0.50, y: self.frame.size.height * 0.6)

    ninja.physicsBody = SKPhysicsBody(circleOfRadius: ninja.size.height / 2)
    ninja.physicsBody?.categoryBitMask = PhysicsCatagory.Ninja
    ninja.physicsBody?.collisionBitMask = PhysicsCatagory.Ground |  PhysicsCatagory.Wall | 
    ninja.physicsBody?.contactTestBitMask = PhysicsCatagory.Ground | PhysicsCatagory.Wall | PhysicsCatagory.Guava
    ninja.physicsBody!.dynamic = true
    ninja.physicsBody!.allowsRotation = false

    self.addChild(ninja)

額外信息:

struct PhysicsCatagory {

static let None : UInt32 = 0
static let Boognish : UInt32 = 0x1 << 1
static let Ground : UInt32 = 0x1 << 2
static let Wall : UInt32 = 0x1 << 3
static let Guava : UInt32 = 0x1 << 4
static let Pepper: UInt32 = 0x1 << 5

}

guavaNodeninjaAteGuava function應為guava

func ninjaAteGuava(ninja: SKSpriteNode, guava: SKSpriteNode){

        guavaNode.removeFromParent()

}

應該:

func ninjaAteGuava(ninja: SKSpriteNode, guava: SKSpriteNode){

        guava.removeFromParent()

}

這是因為函數中的參數是番石榴。 不是guavaNode。 我不知道為什么Xcode沒有給你一個錯誤,但這應該可以。 希望這可以幫助。

您是否已將guavaNode添加到場景或guava 因為您要從場景中刪除guavaNode ,但我懷疑您可能已在guava.runAction(GuavaMoveAndRemove) guava添加到了場景中

還是該動作中還有其他可能觸發您的錯誤的東西?

暫無
暫無

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

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