2017-01-15 5 views
1

私は以前質問したことがありました。私はそれを理解しましたが、私はそれを削除してしまいましたが、実際にはそれを絞りました。skspritenodeを2回読み込んだ後にアプリがクラッシュする

私のノードの1つが障害物に当たると、ゲームはスコアラベルと再開ボタンを表示します。しかし、私のノードが最初のヒット後に別のオブジェクトに当たった場合、アプリケーションがクラッシュします。私は、ラベルの前に//を付けてゲームを実行し、ゲームをうまく動かすために再起動しますが、もしそれらを使ってゲームを実行するとクラッシュします。

これは、再起動ボタンとスコアラベルを2度読み込むためにクラッシュすると考えています。私は完全に間違っているかもしれませんが、どうすればこの問題を修正できますか?

+0

どのようなエラーアプリケーションでクラッシュしますか? – Whirlwind

答えて

1

あなたはおそらく正しいと思います。

addchildにしようとすると、私はシーンに物事を追加していると思います。すでに何かに追加されているシーンやオブジェクトに何かを追加しようとするとクラッシュします。

あなたはおそらく、子供がすでに親を持っていて、これがクラッシュを引き起こしているときに、再起動とスコアラベルを何かに追加しようとしています。

0

SOLVED IT!

文はアプリは1回のだけの衝突ではなく2

それは後知恵で些細なようだが、それがためのヘッド難問だったので
var collision = Int() 


    func didBegin(_ contact: SKPhysicsContact) { 
     var firstBody : SKPhysicsBody = contact.bodyA 
     var secondBody : SKPhysicsBody = contact.bodyB 

     if collision == 0{ 
     if ((firstBody.categoryBitMask == physicsCatagory.bird) && (secondBody.categoryBitMask == physicsCatagory.obstacle)) { 

      collisionWithObstacle(bird: firstBody.node as! SKSpriteNode) 
     } 
     } 
     else if collision != 0{ 
      if ((firstBody.categoryBitMask == physicsCatagory.bird) && (secondBody.categoryBitMask == physicsCatagory.obstacle)) { 

     } 
     } 
    } 


    func collisionWithObstacle(bird:SKSpriteNode){ 


     collision = collision+1 
     scoreTimer.invalidate() 
     obstacleTimer.invalidate() 
     addChild(restart) 
     scoreLabel2.text = "Score: \(score1)" 
     addChild(scoreLabel2) 

    } 

が、これは他の誰かを助けることを願って後に私の衝突コードを実行させるためにならば、私は追加

仕事後数日。

関連する問題