2

私が開発したゲームがあり、一時停止メニュー、ホーム画面メニュー、ゲームプレイ自体の 3 つのシーンがあります。ゲームプレイ中にゲームが一時停止すると、一時停止シーンが次のように表示されます。

[[CCDirector sharedDirector] pushScene:[PauseScene node]];

一時停止シーンから、再起動、再開、ホームメニューの 3 つのオプションがあります。再開をクリックすると、一時停止シーンがポップされ、ゲーム シーンに戻ってゲームプレイが再開されます。ホーム メニューをクリックすると、ゲームプレイ シーンがバックグラウンドに保持され、ホーム メニュー画面からゲームプレイがまだ実行されています。これまでのところ、多くの調査の結果、ゲームプレイ シーン以外のシーンからゲームプレイ シーンを popScene (RAM からほぼ追い出す) する方法を見つけることができませんでした。一時停止画面から、次を使用できます。

[[CCDirector sharedDirector] popScene];

ゲームプレイ シーンのメソッドからそのコードを実行すると、ゲームプレイのインスタンスを削除できますが、バックグラウンドで実行されているゲームプレイ ノードを popScene する方法が必要です。ノードを一時停止します。全体として、基本的な質問は次のとおりです。別のシーンから Cocos2d の特定のシーンをポップするにはどうすればよいですか?

4

1 に答える 1

6

Cocos2d でシーンを変更するための 2 つの主な機能があります: pushScene/popScenereplaceScene.

  1. 最初はpushScene
  • (void) pushScene: (CCScene *) シーン

実行中のシーンの実行を中断し、中断されたシーンのスタックにプッシュします。新しいシーンが実行されます。メモリ割り当てを減らすために、プッシュされたシーンの大きなスタックを避けるようにしてください。実行中のシーンがある場合にのみ呼び出します。

この関数はスタックを利用します。すべてのシーンを後入れ先出し (LIFO)データ構造に格納します。基本的には、シーンを重ねて、来たときと逆の順序で削除します。これはおそらく、ポーズ メニューを「プッシュ」(または表示) し、ポーズ シーンを「ポップ」(削除) してゲームプレイを再開するためのものです。

レイヤーに戻るには、次のように呼び出しますpopScene

  • (無効) 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 でスタックに保持してからpushScene2回ポップすることで維持する必要があります。これにより、私の経験から、「ジャンプ」遷移が発生することがよくあります。

推奨されるアプローチは、 Singleton クラスを作成し、一時停止中にメモリを節約する傾向があります。(シングルトン クラスは、インスタンスを 1 つだけ持つクラスです。基本的には、「現在のゲームの状態」データです。このチュートリアルをお勧めします。)

置換シーンの使用:

1.ホーム画面で起動します。

2.ユーザーが「プレイ」ボタンをクリックするreplaceSceneと、ホーム画面のシーンを停止し、ゲームプレイシーンの実行を開始するために使用します (ホーム画面はもはや実行されず、メモリのどこにも保存されないことに注意してください。情報を記憶する必要がある場合) 、Singleton Classホーム画面データ用のセクションがあります)。

3.これで、ユーザーは少しプレイできます。その後、彼らはトイレ休憩のために一時停止したいと考えています。「一時停止」ボタンをクリックします。すぐにゲームを「一時停止」し、必要なすべてのスプライト、ゲーム ロジックなどを に保存してからSingleton Class、 を使用replaceSceneしてゲーム プレイ シーンを終了し、一時停止シーンをロードします。その後、プレイヤーの選択に応じて、プレイを続行するか (ステップ 4)、ホーム画面に移動します (ステップ 5)。

4. からゲームをレンダリングし、ポーズ メニューから終了してゲーム プレイ シーンをロードするために必要なすべてをリロードしSingleton ClassますreplaceScene

5.replaceScene一時停止メニューを終了し、ホーム画面をロードするために使用します。

于 2013-06-01T22:20:27.997 に答える