2012-03-01 13 views
0

私はiPhoneゲームを作っています。私は素敵なアーキテクチャを実装しようとしましたが、私はそれが私に逆らっていると思います。私は私のPlaySceneのための2つの層を持っています。 HUDLayerとPlayLayer。これら2つは、SceneManagerクラスのレイヤーとしてインスタンス化され、両方がPlaySceneに追加されたクラスです。PlayLayerのHUDLayerからupdateStringメソッドを呼び出すにはどうすればよいですか?

質問がありますが、PlayLayerクラスからHUDクラスにアクセスするにはどうすればよいですか? PlayLayerからアクセスする必要があります。それは、すべての動き/イベントコードがどこにあるかです。

シーンを作成するSceneManagerクラスのメソッドです。

+(void) goPlay 
{ 
    CCLayer *hudLayer = [HUD node]; 
    CCLayer *playLayer = [PlayLayer node]; 
    hudTag = playLayer.tag; 

    [SceneManager goWithHud: playLayer: hudLayer: hudTag]; 
} 


+ (CCScene *) goWithHud:(CCLayer *) playLayer:(CCLayer *) hudLayer:(int)hudTag { 
    CCDirector *director = [CCDirector sharedDirector]; 
    CCScene *newScene = [CCScene node]; 
    [newScene addChild: playLayer]; 
    [newScene addChild: hudLayer z:0 tag:hudTag]; 

    if([director runningScene]) 
      [director replaceScene:newScene]; 
    else 
     [director runWithScene:newScene]; 
    return newScene; 
} 

は、だから私はHUDLayerとPlayLayerクラスとして動作するHUDクラスを持っているもので、すべての動き/イベントコードなど。私はラベルの1つ上の文字列を設定するにはどうすればよい

HUD、そしてどこからそれをやるべきですか?私は多くのアプローチを試みましたが、Obj-Cの理解が不足していると思います。

さらにコードが必要な場合は教えてください。私はそれが必要でなければ、そこにそれの負荷をスパムしたくありません。

ありがとうございました。あなたは両方の層を持っているSceneManagerを持っていたよう

答えて

0

一つのアプローチは、(これは失うカップリングと適切な責任部門を提供します。)

このようなことができます。 delegationまたはnotificationパターンを使用してSceneManagerに動きがあり、PlayLayerに通知することができます(通知の場合は代理人メソッド(またはuserInfo)がSceneManagerHUDLayerの設定に必要な情報を提供します)。

更新:この場合

ではなく、デリゲートメソッドを処理するためのSceneManagerクラスを使用して(すべてのメソッドがstaticあるよう)あなたはSceneManager上で動作し、そこからクラスを使用する必要があります(私はなります。それを'X'と呼んでください)。そこで、Xは委任または通知を処理します。また、オブザーバーを提供するには、goPlayメソッドにXを渡す必要があります。

だからあなたgoPlayメソッド宣言はなります:

+(CCScene *) goPlayWithEventObserver:(id)observer; 

また、goPlay方法から、あなたがgetChildByTagメソッドを呼び出すことにより、その子(HUDLayer)にアクセスするXを助けるであろう、Xにシーンオブジェクトを返す必要があります。デリゲートからPlayLayerのインスタンスを取得するか、userInfoでインスタンスを取得できます。

ありがとう、

+0

これは意味があります。しかし、私はそのようなオブジェクトを作成する構文が不明です、私はどのように私のHUDLayerを参照するのですか?それをインスタンス化すると、HUDオブジェクトになりますが、CCLayerとしてインスタンス化する必要があるため、SceneManagerで 'CCLayer'がupdateStringに応答しない可能性があります。 – cardycakes

+0

クラスの初期化時にCCLayerになるので、HUDのメソッドにアクセスできないため、このメソッドをSceneManagerから呼び出すことはできないようです。 – cardycakes

+0

また、返信いただきありがとうございます! – cardycakes

関連する問題