2012-02-10 1 views
2

私は自分のcocos2dの冒険の始まりであり、いくつかのイデオロギー的な質問があります。私は小さな宇宙飛行士のゲームを作っていますが、私は次のクラス構造を使用する権利がありますか?Cocos2dのベストプラクティス

  • シーン
    • 背景レイヤ
      • 無限視差背景
    • ゲームのレイヤ
      • 宇宙船
      • 箇条書き
    • 制御層
      • ジョイスティック
      • ボタン

とフォローアップの質問 - 他の層からのオブジェクトにアクセスする際のベストプラクティスは何ですか?例えば、ジョイスティックが更新されると、宇宙船を回転させて背景を移動させる必要があります。これらは両方とも他の層にあります。これについてお勧めの方法がありますか?タグで目的のオブジェクトを取得して操作するだけですか?

+0

タグは大丈夫です。ゲーム以外の要素の場合、私は通常通知を使用します – Setrio

答えて

2

ココスは、一部の開発者にアピールしないことがありますが、多くの場合、ココスアプリケーションで使用され、フレームワークの基本的なアーキテクチャであるビッグシングルトンベースのシステム、です。メインシーンが1つあり、そのシーンに多くのレイヤーが追加され、あるレイヤーのコントロールを他のレイヤーのスプライトまたはロジックに適用する場合、メインシーンをシングルトンにしてジョイスティックから情報を送信することは間違いありません他のレイヤーまたはスプライトを操作するためにシーンに戻ってレイヤーを戻します。私はこのすべての時間を行い、このテクニックは書籍やオンラインの無数のCocosチュートリアルで使用されています。そうすれば、あまりにも多くのルールを破ることはないと感じることができます。

代わりに1つのレイヤのポインタを使用して他のレイヤにデータを送信することを選択した場合、特定の親子関係を持たないノードを所有してはならないため、と。後でシーンを削除してメモリがリークする可能性があるため、ネイティブなCocosクリーンアップメソッドでクラッシュや問題が発生する可能性があります。そのような場合には、弱い参照を使用することもできますが、それはまだ別のレイヤーが常に存在することを期待している1つのレイヤーに依存しています。

メインゲームのシーンにデータを送り返し、それに従ってディスパッチして使用することは、本当に効率的です。

1

これは、オブジェクトを配置するための完全に合理的な方法のようですが、これは私が使用する方法です。

オブジェクトにアクセスするには、オブジェクトへの明示的な参照をメンバ変数としてそのまま使用します。 (タグを使うのは悪い選択肢ではありませんが、ちょっと混乱するかもしれません)。

@interface Class1 : NSObject 
{ 
    CCLayer *backgroundLayer; 
    CCLayer *contentLayer; 
    CCLayer *hudLayer; 

    CCSprite *objectIMayNeedToUseOnBackgroundLayer; 
    CCNode *objectIMayNeedToUseOnContentLayer; 

} 
1

タグについては、私は私が割り当ててるタグ番号が一意であることを確認するために使用する一つの方法は、次のように列挙型を定義している:私もちょうどのZORDERとタグのプロパティを設定します

typedef enum 
{ 
    kTag_BackgroundLayer = 100, 
    kTag_BackgroundImage, 
    kTag_GameLayer = 200, 
    kTag_BadGuy, 
    kTag_GoodGuy, 
    kTag_Obstacle, 
    kTag_ControlLayer = 300 
    kTag_Joystick, 
    kTag_Buttons 
}; 

ほとんどの時間CCNodes(つまり、CCSprites、CCLabelTTFsなど)も同じです。したがって、enumを実際に使用してzOrderを定義することもできます。

+0

これはすばらしいヒントです、ありがとう! – clops