2017-02-07 146 views
2

我做一個小遊戲在Swift 3SpriteKit。我想與我的性格和我的增加分數1的特殊對象的碰撞,但由於某些原因,當我發現碰撞,在2分數增加或3如何刪除SKSpriteNode正確

我是從父刪除我的SpriteKitNode但似乎這是行不通的。

這裏是我的代碼:

func checkCollisionsObject(){ 

    enumerateChildNodes(withName: "objeto") {node, _ in 
     let objeto = node as! SKSpriteNode 
     if objeto.frame.intersects(self.personaje.frame){ 
      objeto.removeFromParent() 
      self.actualizarPoints() 
      //self.labelNivel.text = "Level: \(self.nivel)" 
     } 
    } 

} 


func actualizarPoints() { 

    self.pointsCounter += 1 
    points.text = "Points: \(pointsCounter)" 

} 
+1

你爲什麼不使用碰撞委託? –

+0

我應該如何使用碰撞委託? @SimonePistecchia – HessianMad

+2

可能是你必須這樣寫的[鏈接]一些教程(https://www.raywenderlich.com/145318/spritekit-swift-3-tutorial-beginners) –

回答

1

的問題是,碰撞檢測以60fps(非常快)發生。所以在那個時候發生了多次碰撞檢測。你只是處理第一個。

我通常喜歡在對象上的屬性,我可以觸發,讓我知道該對象是否已經相撞,並設置它,使得它不再檢測碰撞。

在你的情況的對象只是一個SKSpriteNode所以你必須設置在用戶數據屬性,或使對象的自定義對象,並有物業在自定義對象類

func checkCollisionsObject(){ 

    enumerateChildNodes(withName: "objeto") {node, _ in 
     let objeto = node as! CustomObject 
     if objeto.frame.intersects(self.personaje.frame) && objeto.hasCollided == false { 
      objeto.hasCollided = true 
      objeto.removeFromParent() 
      self.actualizarPoints() 
     } 
    } 
} 

func actualizarPoints() { 

    self.pointsCounter += 1 
    points.text = "Points: \(pointsCounter)" 

} 
+0

呀!有用!謝謝!!! :D – HessianMad

+0

樂意幫忙 –