2011-01-04 5 views
0

私はいくつかのレベルでゲームをデザインしています。私は、一時停止ページ、トランジションページ、プレイヤーのスコアバナー、すべてのレベルに共通のすべてのものを処理するシングルトン(MasterSceneと呼ばれる)として定義されたCCLayerを持っています。 したがって、各レベルで、ユーザーが一時停止ボタンを押すと、一時停止ページに対応するCClayerを表示するためにシングルトンが呼び出されます。私の問題は、シングルトン(レベル)を誰が呼んだのかを知りたいということです。それをする方法はありますか?アプリケーションのアーキテクチャの詳細を知らなくても おかげシングルトンと呼んだ人を知る方法 - 目的C

答えて

3

は、私は、次の3つのアプローチをお勧めしたい:

  1. は(レベルのオブジェクトにまたはポインタ、または何でも)レベル番号を渡しシングルトンのメソッドにパラメータとして。
  2. オブジェクトが現在のレベルを把握しているので、すでに知っているレベルになります。 (もちろん、これは現在のレベルだけがこれらのメソッドを呼び出すことができると仮定していますが、なぜ複数のレベルに一時停止ボタンがあるのか​​わかりません)。
  3. このオブジェクトを全くシングルトンにしないでください。各レベルのインスタンスを作成します。このオブジェクトが追跡する必要があるアプリケーショングローバル状態が本当にありますか? MasterSceneを使用して動作をカプセル化し、グローバルな状態をカプセル化していない場合、そのクラスの複数のインスタンスを実際に何かを傷つけない(またはデバイスリソースを大量に消費する)ことはありません。
+0

パラメータとしてレベル番号を渡すことがおそらく最良の選択肢です(明らかに、私はボックス外で考えたはずです)。一時停止ページは現在のレベルで変数を設定する必要があるため、子として一時停止ページを追加するのではなく、シングルトンメソッドを使用します。私はちょうど子供が両親に何をすべきかを教えてもらえません...ありがとうございます。 – Cyril

1

あなたが求めている方法でメッセージのソースを見つける一般的な方法はありません。

しかし、この問題を解決する可能性のある別のアーキテクチャがありますので、それらを検討することをおすすめします。あなたが説明していることは、相互依存クラスの混乱のように聞こえる。あなたのすべてのレベルは、このMasterSceneシングルトンを認識して使用しています。そして、あなたはシングルトンをあらゆるレベルにも気づかせようとしていますか?アプリケーションのあらゆる部分は、他のすべてのアプリケーションに気づく必要はありません。

0

引数として渡すことができます。

@implementation Level30 
-(void) pause; 
{ 
    [[MasterScene getSingleton] pauseWithLevel:self]; 
} 
@end 
関連する問題