2016-10-14 6 views
2

私はSpriteKitを使って簡単な2Dアーケードゲームを作成しました。スコアリングシステムを追加しようとしています。基本的にゲームは様々な障害を乗り越えなければならない正方形のスプライトです。だから私が望むのは、プレイヤーがゲーム全体を再開するためにオブジェクトに接触したときです。ゲームは接触を検出しましたが(私はそれを以前にテストしましたが)、すべての子供を取り除いてからゲームの基本機能を実行すると、古いオブジェクトが互いに出現し続けていることがわかります。Sprite - Kit Game Swiftの再起動

func didBegin(_ contact: SKPhysicsContact) { 

    if (contact.bodyA.categoryBitMask == PhysicsCategory.Player && contact.bodyB.categoryBitMask == PhysicsCategory.Obstacles) { //case where PLAYER collides with OBSTACLE 

     print("I detect Contact") 

     Scorelabel.text = "0" 
     scoreCounter = 0 


     self.removeAllActions() 
     self.removeAllChildren() 

     self.setupGame() 

    } 

didBegingのFUNCは、その後、他の例すべての

`

+1

申し訳ありませんが、私はあなたの質問を理解していません。単純なゲームを終わらせるか、人生の喪失を実現したいのかは分かりません(例えば、リロードせずに前の状態に戻る必要があるシーン)。とにかく、ゲームをしたい場合は、Nikの答えに従ってください。さもなければ、古い状態を表すためにプロパティを修正する必要があります。何度も呼び出すことができるので、didBegin(_contact)で行うべきではありません(コードが間違っています)。 –

+0

ありがとう、ありがとうございます。私は何回も呼ばれていると言ったことが間違っていると信じています。 –

答えて

5

シーンを再起動しようとしている場合、あなただけの同じシーンを提示することができ、それが戻ってそのデフォルトにリセットします:

let scene = GameScene(size: self.size) // Whichever scene you want to restart (and are in) 
let animation = SKTransition.crossFade(withDuration: 0.5) // ...Add transition if you like 
self.view?.presentScene(scene, transition: animation) 

は、あなたがしていると、再起動を希望する方のシーンでこのコードを入れてください。シーンを再起動するときに呼び出される必要があります。

シームレスに移行しようとしている場合は、アニメーションを表示しない(またはクロスフェードする)ことができます。

また、シーン/メニューの上にゲームを作成することもできます。これは、ゲームがリセットされたり、別のシーンになっても見えるようになるもう1つのSKNodeである可能性があります。

+1

これは私がリセットをお勧めする方法です。新しいゲームを新しく始めることができます。これは、以前のゲームデータが新しいゲームに引き継がれ、状態を破損する可能性がないことを意味します。 – Knight0fDragon

+0

Wher eこのコードを入力してシーンを再起動しますか? – Confused

+0

@Confusedシーンを再開する場所はどこでも – Nik

2

まず継続する//プレイヤーが接触Aであるか、プレイヤーが連絡先Bである場合ならば、あなたは、両方のケースを確認してください 第2に、削除したいオブジェクトを変数に割り当てる必要があります。例えば、オブジェクトBが障害物であることを示す場合は、contact.bodyB.node.removeFromParent()を実行すると、オブジェクトが正常に削除されます。

+1

私はあまり明確ではないと私は信じています。私の目標はゲームを完全に再開することです。私は与えられた障害物を取り除きたいだけではありません。他のコンタクトケースについては、私は自分のコードに実装しましたが、ちょうど私の質問の一部としてそれを追加しませんでしたので、ちょっと一新しました –

+1

その場合、ゲームシーンでこれを行うことができます: newGame = GameScene(サイズ:self.size) newGame.viewController = self.viewController self.viewController.currentGame = newGame self.changePlayer() newGame.currentPlayer = self.currentPlayer せ遷移= SKTransition.doorway(withDuration:1.5) self.view?.presentScene(newGame、transition:transition) –

関連する問題