web-dev-qa-db-ja.com

Cocos2dがレイヤーに背景画像を追加しますか?

Cocos2dのドキュメントを読み終えたところです。レイヤーに背景画像を追加することを理解している限り、次のような操作を行う必要があります。

Sprite * bg = [Sprite spriteWithFile:@"Background.png"];
[layer addChild:bg z:0];

私のテストでは、次のようにスプライトをシーンに直接追加できます。

@implementation IntroScene
- (id) init {
self = [super init];
if (self != nil) {
    Sprite * bg = [Sprite spriteWithFile:@"Background.png"];
    [bg setPosition:ccp(240, 160)];
    [self addChild:bg z:0];
    [self addChild:[MenuLayer node] z:1];
}
return self;

}

この2つのオプションの違いは何ですか?また、レイヤーの背景を設定するためのより良い方法は何ですか?どんな助けでも大歓迎です。

25
Oscar Gomez

レイヤーは必要ありませんが、便利です。レイヤーは、スプライトを(視覚的にも組織的にも)グループ化する方法と考えてください。背景画像をレイヤーとしてグループ化し、ゲーム内のすべての敵を別のレイヤーとしてグループ化することができます。これにより、各セットをよりクリーンに処理できます。例えばすべての敵を見つけて削除する代わりに、特定のレイヤーを削除できます。

それが役立つ場合は、Photoshopまたはグラフィック編集プログラムでレイヤーを試してみてください。 cocos2dのレイヤーも同様に機能します。

単純なシーンの場合、レイヤーまたはシーンに背景を追加しても大きな違いはありません。しかし、階層化のメリットが発揮されるまで、それほど時間はかかりません。

25
Colin Gislason

また、レイヤーは描画順序を制御します(レイヤー間のz順序に加えて)。

たとえば、geoSparkには、背景レイヤー、a sparkレイヤー、UIレイヤーなど(簡略化)があります)。ただし、これにより、UIが常にどのゲームよりも上にあることを確認できます。もの(sparkレイヤー)と背景の上にあるすべてのもの。

ゲームが加法レンダリングのみを行う場合、描画順序はそれほど重要ではありません。 :)

-ダビデ

8
David Whatley

シーンは黒板、レイヤーはページです...ニュースはページに書かれていますが、必要に応じてボードに書くことができます。すべての新しいものを消去したい場合。

4

Cocos2dでは、任意のノードに任意のノードを追加できます。しかし、それは階層のレベルに依存します。

シーンにレイヤーを追加できます。同じプロパティが必要な場合、またはCCSceneに追加するすべてのレイヤーを探す場合は、CCSceneに追加できます(2番目の場合と同様)。ただし、レイヤーごとに異なる機能が必要な場合は、それらをCCLayerに追加してください。

CCLayerは、何らかの目的でノード/スプライトのセットをグループ化するためのものです。たとえば、ゲームを一時停止した後にオプションを含むレイヤーを追加したり、スクロールレイヤー(一部のスクロールプラットフォームゲームに見られるように)とともに常に画面にsomの種類を表示するHUDレイヤーを追加したりできます。

最後に、CCScene上のCCNode、別のレイヤー上のレイヤー、さらにはCCSprite上のCCNodeも可能です。ただし、cocos2dのグラフィックスコンテキストで描画する順序は異なります。

あなたが違いを得たことを願っています。

幸運を!

0
Kumar C