2017-02-07 10 views
2

私はSwift 3SpriteKitの小さなゲームをやってるSKSpriteNodeを削除する方法。私は自分のキャラクターと1のスコアを増やす特殊なオブジェクトとの衝突をしたいが、何らかの理由で何らかの理由で衝突を検出すると、スコアは2または3で増加する。正しく

私は親から削除している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の(かなり速い)で起こっているということです。

は、ここに私のコードです。だから、その時間に複数の衝突検出が発生しています。あなたはちょうど最初のものを扱っています。

私は通常、私はので、私は、オブジェクトが衝突したか否かを知ることをトリガし、それはもう衝突を検出しないように設定することができ、オブジェクトのプロパティを持ちたいです。あなたのケースでは

は、オブジェクトを使用するとのuserDataでプロパティを設定したり、オブジェクトにカスタムオブジェクトを作成し、カスタム・オブジェクト・クラス内のプロパティを持っている必要がありますので、ちょうど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

喜んで助けてください –