2016-01-23 90 views
0

我對Swift很陌生,所以請原諒我,如果這是令人困惑的。Swift 2,SpriteKit,我無法從父項中刪除一個節點

我試圖讓我的一個節點「番石榴」在「忍者」與它相撞時消失。

目前我的代碼在我的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 

}

+0

您是否已將guavaNode添加到場景中? – Seivan

回答

0

guavaNode應在ninjaAteGuava function

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

     guavaNode.removeFromParent() 

} 

guava應該是:

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

     guava.removeFromParent() 

} 

這是因爲你在函數參數是番石榴;不是guavaNode。我不知道爲什麼Xcode不會給你一個錯誤,但這應該工作。希望這可以幫助。

+0

雖然我同意應該引用塊參數,但我認爲這可能不是問題。 由於'ninjaAteGuava''已經可以訪問範圍'''guavaNode''定義在 另一個問題是它不會幫助,因爲''''''''''''''''''''''''''因此也刪除 '''番石榴'''。 還有一些問題,因爲塊參數'''guava''被聲明瞭兩次。 不知道如何沒有警告。 – Seivan

0

您是否已將guavaNode添加到現場或guava? 因爲你從現場移除guavaNode,但我懷疑你可能已添加到guava場景內 guava.runAction(GuavaMoveAndRemove)

也許那裏的行動,可能會引發你的bug裏面別的東西?