2017-02-07 4 views
2

Я делаю небольшую игру в Swift 3 и SpriteKit. Я хочу столкнуться с моим персонажем и специальным объектом, который увеличивает мой балл в 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

Может быть, вы должны прочитать какой-то учебник, подобный этому [link] (https://www.raywenderlich.com/145318/spritekit-swift-3-tutorial-beginners) –

ответ

1

Проблема заключается в том, что обнаружение столкновений происходит на 60fps (довольно быстро). Таким образом, за это время происходит множественное обнаружение коллизий. Вы просто справляетесь с первым.

Обычно мне нравится иметь свойство объекта, которое я могу вызвать, чтобы я знал, столкнулся ли объект и установил его, чтобы он больше не обнаруживал столкновений.

В вашем случае объект просто SKSpriteNode, так что вы должны установить свойство в USERDATA или сделать объект пользовательского объекта и имеют свойство в классе пользовательского объекта

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

рад помочь –

Смежные вопросы