0

私は単純なゲーム、ブレイクアウトクローンを持っています。ゲームプレイレイヤー、メニューレイヤーがあります。プレイ中にメニューをうまく呼び出すことができ、次のレベルのボタンを使用できます(次のレベルの新しいゲームプレイレイヤーを作成し、そのシーンに移行します)。しかし、私が欲しいのはレベルの終わりです。すべてのブロックを殺したときに、プレーヤーが次のレベルをクリックできるように、そのメニューをポップアップさせたいのです。しかし、問題は、ブロック番号をゲームプレイレイヤーに保存することです。したがって、ブロック番号がゼロに達すると、特定のプロパティがtrueになります。しかし、レベルが終了したときにメニューからそのプロパティを読み込もうとすると、メニューに移行してからゲームプレイレイヤーの割り当てが解除されているため、読み込めません。

Tldr; ボタンでレベルを変更する方法は?

4

1 に答える 1

2

あなたの質問はゲーム アーキテクチャに関するものだと思います。ゲームをどのように設計するかについては、多くのトレードオフがあります。これは、Cocos2d ゲームを作成するときに、私がよく考えてきたことです。

Shailesh_ios によるコメントが機能します。ただし、より複雑なゲームを作成する場合は、ゲーム内のさまざまなモジュールとコンポーネントをきちんと整理して、使いやすくサポートしやすいようにゲームを設計することを検討する必要があります。ゲームが複雑になるにつれて、AppDelgate に多くの機能を追加すると、非常に面倒になる可能性があります。コードを更新する際に整理された状態を保ち、正気を保つために、ゲーム内に一元化されたゲーム マネージャー サービスを作成することをお勧めします。

集中化された GameManager サービスを作成する -- ゲームに必要なすべての集中化されたサービスについて、CCNode または NSObject のサブクラスであるゲーム マネージャー クラスを作成することでうまくいきました。このクラスはシングルトン化されています。次に、GameCenter、OpenFeint、アプリ内購入、プレイヤー設定、ローカル スコアと実績、物理ワールド マネージャー、ゲーム オーディオ、ゲーム ステートなどの個別のクラスを作成します。

クラス インスタンスをモジュールとして GameManager に追加 --これらの クラスはすべて、GameManager シングルトン クラスによって所有され、それらを必要とするゲーム コンポーネントにサービスを提供できます。これらのクラスは一般にメモリをほとんど使用しないため、シーンが変わるたびに常に作成および破棄する必要はなく、CPU サイクルとバッテリー寿命を浪費するだけです。

注意点 -- ただし、グローバル シングルトンの GameManager クラスに属さないものを追加して悪用するのは簡単なので注意してください。さまざまなゲーム コンポーネントから要求される可能性のある集中型サービスは、GameManager に追加されると見なすことができます。GameManager に追加するとは、各モジュールを独自のクラスでコーディングし、GameManager によって作成および所有されることを意味します。

-- たとえば、カスタム ローカル スコアと実績クラスをセットアップして、プレーヤーのスコアを保存し、それらをファイルまたは NSUserDefaults に永続化し、その情報を必要とするすべてのゲーム コンポーネントで利用できるようにすることができます。

カスタム GameCenter または OpenFeint クラスは、プレーヤーの認証を処理し、サービスとして、スコア/実績の送信、スコア/実績のダウンロード、リーダーボードおよび実績のための組み込みの GameCenter/OpenFeint UI の提示などを提供します。

このようにして、ゲームの設計に集中し、ゲームに必要な基本的なサービスをゲーム内のどこからでも利用できるようにすることができます。

于 2012-08-01T22:20:50.903 に答える