Cocos2d でシーンを変更するための 2 つの主な機能があります: pushScene
/popScene
とreplaceScene
.
- 最初は
pushScene
:
- (void) pushScene: (CCScene *) シーン
実行中のシーンの実行を中断し、中断されたシーンのスタックにプッシュします。新しいシーンが実行されます。メモリ割り当てを減らすために、プッシュされたシーンの大きなスタックを避けるようにしてください。実行中のシーンがある場合にのみ呼び出します。
この関数はスタックを利用します。すべてのシーンを後入れ先出し (LIFO)データ構造に格納します。基本的には、シーンを重ねて、来たときと逆の順序で削除します。これはおそらく、ポーズ メニューを「プッシュ」(または表示) し、ポーズ シーンを「ポップ」(削除) してゲームプレイを再開するためのものです。
レイヤーに戻るには、次のように呼び出しますpopScene
。
キューからシーンをポップアウトします。このシーンは実行中のシーンに置き換わります。走行シーンが削除されます。スタックにシーンがなくなると、実行が終了します。実行中のシーンがある場合にのみ呼び出します。
2.もう 1 つのオプションは、あなたが望むと思われるものですreplaceScene
。これにより、現在実行中のシーンが停止し、完全に新しいシーンに置き換えられます。これは、ゲームを終了する場合や、元のメイン メニューから初めてゲームプレイに移行する場合に必要となる可能性があります。
- (void) replaceScene: (CCScene *) シーン
ランニングシーンを新しいものに置き換えます。走行シーンは終了。実行中のシーンがある場合にのみ呼び出します
pushScene
*注意:控えめに使用してください。すべてのシーンをメモリに保存して、後でスタックからポップできるようにします。そのため、あまりにも多くのシーンを保存して忘れないようにしてください。
**出典: cocos2D ウェブサイト
編集1:
いくつかのオプションがあります。replaceScene
現在実行中のシーンのみを置き換えるものであり、通常はこれを使用することを忘れないでください。シーン スタック全体を「クリア」するわけではないため、pushScene
/を使用することはほとんどありませんpopScene
。以下のデモでは、両方の問題を示します。ただし、可能な限りメモリを節約するようにしています。
push/popScene の使用:
1.ホーム画面で起動します。
2.ユーザーが「プレイ」ボタンをクリックするreplaceScene
と、ホーム画面のシーンを停止し、ゲームプレイシーンの実行を開始するために使用します (ホーム画面はもはや実行されず、メモリのどこにも保存されないことに注意してください。情報を記憶する必要がある場合)pushScene
私がこれを行う理由は、ホーム画面が毎回同じである可能性が高く、プレイ中に実行し続ける必要がないためです) 。
3.これで、ユーザーは少しプレイできます。その後、彼らはトイレ休憩のために一時停止したいと考えています。「一時停止」ボタンをクリックします。次にpushScene
、Game Play シーンの現在の状態を保存し、Pause Menu シーンの実行を開始するために使用します。(ゲームプレイはいわば「一時停止」)。スタックは次のようになります。
//Bottom ----------------------> Top
[Game Play scene], [Pause Menu Scene]
4.少し一時停止した後、pushScene
一時停止メニュー シーンをメモリから削除し、「一時停止」されたゲーム プレイ シーンをロードして、すぐにプレイを再開することができます。
問題は、一時停止 -> メインメニューから移動したい場合はどうなるかということです。一時停止メニューで使用しただけreplaceScene
では、古いゲームが記憶に残ります。その古いゲーム プレイ シーンを削除する方法を見つける必要があります。
もう1つのオプションは、ホーム画面を a でスタックに保持してからpushScene
2回ポップすることで維持する必要があります。これにより、私の経験から、「ジャンプ」遷移が発生することがよくあります。
推奨されるアプローチは、 Singleton クラスを作成し、一時停止中にメモリを節約する傾向があります。(シングルトン クラスは、インスタンスを 1 つだけ持つクラスです。基本的には、「現在のゲームの状態」データです。このチュートリアルをお勧めします。)
置換シーンの使用:
1.ホーム画面で起動します。
2.ユーザーが「プレイ」ボタンをクリックするreplaceScene
と、ホーム画面のシーンを停止し、ゲームプレイシーンの実行を開始するために使用します (ホーム画面はもはや実行されず、メモリのどこにも保存されないことに注意してください。情報を記憶する必要がある場合) 、Singleton Class
ホーム画面データ用のセクションがあります)。
3.これで、ユーザーは少しプレイできます。その後、彼らはトイレ休憩のために一時停止したいと考えています。「一時停止」ボタンをクリックします。すぐにゲームを「一時停止」し、必要なすべてのスプライト、ゲーム ロジックなどを に保存してからSingleton Class
、 を使用replaceScene
してゲーム プレイ シーンを終了し、一時停止シーンをロードします。その後、プレイヤーの選択に応じて、プレイを続行するか (ステップ 4)、ホーム画面に移動します (ステップ 5)。
4. からゲームをレンダリングし、ポーズ メニューから終了してゲーム プレイ シーンをロードするために必要なすべてをリロードしSingleton Class
ますreplaceScene
。
5.replaceScene
一時停止メニューを終了し、ホーム画面をロードするために使用します。