1

Cocos2d でのシーンの役割は何ですか?

シーンは、GameEngineLayer、HUDLayer などのレイヤーをインスタンス化します。

GameEngineLayer クラスはシーン間で同一である可能性があると思いますが、シーンごとに異なるオブジェクトが存在することになるのは当然です。

シーン 1 にはサンタが 1 人とルドルフが 1 人いる場合がありますが、シーン 2 にはサンタが 2 人しかいません。シーン 1 でサンタと 1 人のルドルフをインスタンス化し、それらをゲーム オブジェクトのリストに入れて、gameEngine のインスタンスに渡しますか? シーン 2 では、同じパターンに従って 2 人のサンタをインスタンス化しますか?

シーンは、イベントのリストを、タイム スタンプ付きのイベントを含むそれぞれの gameEngine インスタンスにも渡しますか? たとえば、そのサンタは 1 分後にルドルフに餌をあげますか?

こういうことをするのはシーンの責任ですか?

1週間前にcocos2d/box2dゲームを始めた初心者です。多くの例を読みましたが、通常は HelloWorldLayer クラスですべてをコーディングしています。:)

追加例: http://www.raywenderlich.com/4666/how-to-create-a-hud-layer-with-cocos2d シーンはActionLayer.mm内で定義されます。どうして??ActionLayer をインスタンス化する Scene1.m がないのはなぜですか?

4

1 に答える 1

0

cocos2d に CCScene がある唯一の理由は、CCDirector が runWithScene や replaceScene などのメソッドの基本クラスとしてそれを必要とするためです。それ以外は、CCScene、CCLayer、および CCNode は互いに実質的に同一です。

シーン、レイヤー、ノード、スプライトなどに任意の役割を与えることができます。

しかし通常、シーンは現在アクティブなゲーム オブジェクト (ノード) の状態マネージャーの役​​割を担います。一般的な使用例は、シーンをシングルトンとして宣言して、子ノードがシーンの基本メソッドにアクセスできるようにすることです。たとえば、関連のない他のノード メッセージを送信したり、ゲームが終了したかどうかを確認したりできます。

イベントの伝達については、UIKit のようにイベントを渡す簡単な方法がないため、イベントを渡すことに賛成です。ただし、イベントの種類や好みのデザインによって異なります。

サンタがルドルフに餌をやるためにメッセージを送るか、ルドルフがサンタに何か食べ物があるかどうか頻繁に尋ねるかどうかもあなた次第です。どちらのアプローチにも長所と短所があります。

多くの例が CCLayer クラス内で CCScene オブジェクトをインスタンス化する理由は、Cocos2D がシーンを持たなければならないという要件のためです。個人的には、長年にわたって事実上の標準となっている悪い例の悪い例だと思います。常に CCScene クラスを作成し、その中に必要なすべてのレイヤーとその他のノードを作成する方がよいでしょう。シーンとレイヤー、および他のノードとの関係がより明確になったでしょう。現状では、すべてのコードを実行する単一のレイヤーを含むだけで何もしないシーン クラスのプロジェクトがたくさんあります。

于 2011-12-11T22:07:18.290 に答える