0

サブクラス化するクラスがわからないスプライトがいくつかあります。スプライトに追加する必要があるすべての子をそのクラスに保持できるため、現在は CCLayer を使用していますが、タッチ イベントは重なり合うすべてのレイヤーによって検出され、それほど賢くない可能性があります。平たく言えば、たとえば火炎放射器に触れたときに炎を追加しなければならないような火炎放射器が欲しいのです。これを行うには、FlameThrower.h クラス (CCLayer のサブクラス) 内に炎を追加するだけです。CCSprite をサブクラス化する場合、親のクラスにも炎を追加する必要がありますが、これも効果がありません。ここで正しいアプローチ?

4

1 に答える 1

1

CCSprite や CCLayer をサブクラス化する必要はまったくないかもしれません。

これは Cocos2d ゲーム アーキテクチャの基本的な問題であり、もっと頻繁に議論されることを望みます。

私が作成したゲームでは、キャラクターを作成するための基本クラスとして NSObject または CCNode を使用します。

これらのキャラクター コントローラー クラスは、キャラクターの AI のロジックを実行し、物理演算がある場合はキャラクターの物理ボディを所有し、キャラクターを表す 1 つまたは複数のスプライトを制御します。

キャラクター コントローラーが CCNode によって提供されるプロパティや機能を必要としない場合は、NSObject をサブクラス化します。これは通常、物理ベースのキャラクターの場合です。

ユーザー入力は通常、HUD によって所有されますが、ゲーム ワールド内の特定のキャラクターに直接追加したい場合もあります。その場合、CCLayer をサブクラス化してタッチと加速度計を追加するか、CCNode をサブクラス化してタッチ ディスパッチャーに登録することができます。

通常、別のクラスでキャラクターのスプライトを作成し、そのクラスを作成してキャラクター コントローラーが所有します。

私が作成するゲームには通常 1 ~ 4 枚のスプライト シートがあり、GameManager クラスでこれらを CCSpriteBatchNodes として CCSpriteFrameCache にロードし、ワールド ビルディング スクリプト エンジンを介してキャラクターを作成するときに、必要な CCSpriteBatchNode への参照をそのキャラクターに渡します。バッチノードを使用してキャラクタースプライトを追加できるようにします。

その後、キャラクターは GameManager または親キャラクターに登録され、更新、管理され、最終的に破棄およびクリーンアップされます。

物理ベースのキャラクターの場合、ノードまたは NSObject が所有するスプライトを制御する代わりに物理ボディでノードの動作を直接制御する場合を除き、通常は CCNode (ましてや CCLayer または CCSprite) をサブクラス化する必要さえありません。

于 2012-08-02T19:18:07.697 に答える