2012-11-12 5 views
6

私はこのような構成でCCSpriteBatchNodeを持っている:すべての子供(ChildA1、ChildB1、ChildA2が...)CCSpriteオブジェクトであるCCSpriteBatchNode:子の子が描画パフォーマンスを受け取るかどうか

CCSpriteBatchNode 
    ChildA1 
     ChildB1 
     ChildB2 
     .... 
     ChildB999 
    ChildA2 
    ChildA3 
    ... 

[CCSprite spriteWithSpriteFrameName:@"FileName.png"]; 

ChildA1は次のように作成されます:CCSpriteBatchNodeと、すべての子どもたちが、ChildA1を介して作成され

// Create Parent Sprite 
CCSprite* childA1 = [[CCSprite alloc] init]; 
childA1.contentSize = CGSizeMake(37.5,37.5); 
childA1.anchorPoint = ccp(0,0); 
[batchNode addChild:childA1 z:0 tag:1]; 

// Add Child Sprites 
[childA1 addChild:childB1 z:0 tag:1]; 
[childA1 addChild:childB2 z:0 tag:1]; 
[childA1 addChild:childB3 z:0 tag:1]; 
// Continue adding childB4-childB999 

注:これはうまくレンダリング、と私は期待して出力、childB1年代を見ます位置はchildA1に相対的であり、移動するとchildA1childB1に移動します。

私の質問は次のとおりです。図面のパフォーマンスがそれぞれchildB1-となりますか?私が理解しているところでは、CCSpriteBatchNodeは、CCSpriteBatchNode内のすべての子の描画を、その子をすべて描画することによって最適化します。CCSpritesこれはそれらの子供たちにも当てはまりますかCCSprites?私はこれをやっている理由を知りたい人のために

: 多くの層が、このゲームの中にありますし、CCSpriteBatchNodeCCSpriteの内側CCSpritesをグループ化するには、私はその親だけを操作することにより、CCSpritesのグループを操作することができますスプライトのグループ

+3

AFAIK、はい。 cocos2.0以降を使用している場合は描画数を確認し、子を追加してください。増やすべきではありません。つまり、バッチノードは追加されたテクスチャごとに1回の描画呼び出しを消費します。あなたがARCしているかどうかは分かりませんが、もしそうでなければ、おそらくchildA1が書かれていて漏れているでしょう(そのコンストラクタは自動解放されたオブジェクトを返しません)。 – YvesLeBorg

+0

私はYvesLeBrogに同意します..あなたがTexture Memory for Cocos2dについて話しているのであれば、イメージまたはテクスチャごとに読み込まれています。テクスチャがメモリにロードされると、メモリや時間がかかって再びロードされないため、ゲームのパフォーマンスが向上します。あなたの変数で消費されるメモリに関しては、CCSpriteのインスタンスがクラスそのもので自動解放されるので、これは理想的な方法ではないと私は考えています。だから私たちは彼らのメモリ消費について心配する必要はありません。 –

答えて

2

短い答えは、はい、CCSpriteBatchNodeはすべての間接子孫を含むすべての子ノードに対して1回の描画呼び出しを行います。

ただし、これが標準のCCSpritesを使用するよりも優れているかどうかは、スプライトの変更頻度によって異なります。 CCSpriteBatchNodeを使用するときは、スプライトを変更するたびに、GPUではなくCPUを使用して、そのスプライトおよびそのすべての子のテクスチャアトラスクアッド座標を再計算する必要があります。たとえば、ChildA1の位置を移動すると、ChildB1ChildB999の座標は、次のフレームがレンダリングされる前に再計算されます。ほとんどのアプリケーションでは、描画呼び出しが比較的高価ですが、最終的にアプリケーションやスプライトの使用方法に依存するため、OpenGL描画を減らすと余分な計算にかかるコストが重くなります。アプリケーションがパフォーマンスのボトルネックになっている場合は、アプリケーションに適用されます。

関連する問題