1

CCSprite のサブクラス化と、init で CCSprite を作成するだけの利点について詳しく知りたいと思いました。

iOS dev と Cocos2d の新機能。

私のゲームは init でいくつかの CCSprites を作成し、タッチ/ドラッグ/コリジョンでそれらのいくつかを複製します

サブクラス化への埋め込みも検討中

アップデート:

また、スプライトにはテキスト ラベルと、各スプライトとはわずかに異なる音声ファイルと画像ファイルがあります。たとえば、すべてのスプライトの画像は同じですが、テキストと音声は異なります。衝突すると、画像ファイルが変更される可能性があります

4

2 に答える 2

6

CCSprite をサブクラス化する必要がある場合:

  • ほとんどは決してない
  • スプライト自体の表示方法を変更する必要がある場合のみ(カスタム描画)

スプライトは Cocoa 用語で「ビュー」です。他のすべてのノードも同様です。つまり、スプライトは画面にテクスチャをレンダリングするオブジェクトです。スプライトの描画方法を変更したい場合、サブクラス化は理にかなっています。おそらく 2 つのテクスチャを 1 つにブレンドし、マスキング機能を追加したり、異なるシェーダー コードを実行したり、カスタム OpenGL 描画を追加したりします。

それが明確でない場合は、別のビュー クラスについて同じ質問をもう一度してください。

"What's the advantage of subclassing UIButton? When does it make sense?"

回答: ボタン自体の表示方法を変更する必要がある場合のみ。

UIButton をサブクラス化して、画面上を移動させたり、テキスト フィールドでアクションを実行させたりしないでください。それがView Controllerの仕事です。ビュー コントローラーを使用すると、ビューをサブクラス化せずにそのまま使用できます。必要なのはビュー コントローラーであり、CCSprite のサブクラスではありません。すでにあまりにも頻繁に行われています。

簡単に言えば:

CCSprite (など) をサブクラス化するのは、パブリック インターフェイスを介して意図したタスクを実行できない場合のみです。

位置、回転、スケール、テクスチャ、スプライト フレームなどの変更は、すべて外部クラス (コントローラー) から変更できるプロパティです。CCAnimation や実行中のアクションなど、スプライトのアニメーション化についても同じことが言えます。

MVC 設計で慣例のようにコントローラー オブジェクトを使用する場合、CCSprite やその他のノード クラスをサブクラス化する必要はほとんどありません。さらに、userObject プロパティを使用すると、コントローラー オブジェクトをノードと共に格納できるため、ノードの割り当てが解除されるとコントローラー オブジェクトも割り当て解除されます。

もちろん、どちらのアプローチも機能します。最終的には、ベスト プラクティスを使用するか、バッド プラクティスを使用するかだけです。

于 2012-09-28T16:32:50.973 に答える
1

一般に、CCNode をサブクラス化し、初期化中に CCSprite を追加するのが標準的な方法です。基本的には、すべてのスプライトで再利用するベース スプライト クラスに実際に機能を追加するか、ヘルスとマナなどを持つ Player オブジェクトを作成するだけかということになります。この質問には、それに関する本当に良い情報がいくつかあります。

CCSprite、CCNode、または NSObject をサブクラス化する必要がありますか?

多くのスプライトを作成して複製する方法については、CCSpriteBatchNodeを参照してください。バッチ ノードは、同じテクスチャを持つすべてのスプライトを 1 回の描画呼び出しで描画します。これにより、パフォーマンスが大幅に向上します。また、テクスチャ アトラスを使用して、多くのスプライトのテクスチャを 1 つのテクスチャに結合し、全体をバッチ処理することもできます。この機能を提供する優れたツールがいくつかあります。Texture Packerまたはこれを強くお勧めします。

あなたが言うようにたくさんのスプライトを作成している場合、Texture Packer はメモリ使用量を削減するのにも最適です。すべてのテクスチャは 2 のべき乗でメモリに格納されるため、130x130 のスプライトがある場合、実際には 256x256 の非圧縮画像としてメモリに格納されます。これにより、アプリケーションに大量のメモリが追加される可能性があります。Texture Packer は、すべての画像を 2 の累乗のテクスチャに保存することでこの問題を回避します。cocos2d は、各スプライトに必要な部分だけを引き出すことができます。

このすべての詳細と、テクスチャ パッカーとバッチ ノードに関する優れたチュートリアルは次のとおりです。

http://www.raywenderlich.com/2361/how-to-create-and-optimize-sprite-sheets-in-cocos2d-with-texture-packer-and-pixel-formats

于 2012-09-27T22:21:17.743 に答える