0

私のゲームでは、すべてのキャラクターが同じテクスチャを持っています。したがって、シーンに100文字ある場合、テクスチャを含む100個のスプライトが必要であり、メモリの問題が発生する可能性があります。


したがって、単一のCCTexture2D(つまり、1つのメモリ割り当て)を共有できれば、メモリ使用量は大幅に減少すると思います。

静的またはグローバル宣言で可能ですか?

コメントplz〜

4

3 に答える 3

4

同じスプライト、同じテクスチャ。このケースを最適化しないゲームエンジンは、実際にはそれ自体をゲームエンジンと呼ぶことはできません。

「tex.png」を使用するスプライトがある場合、tex.pngがメモリにロードされます。tex.pngを使用してさらに数十億のスプライトを追加すると、スプライトオブジェクト自体のみがより多くのメモリ(数百バイト)を使用しますが、テクスチャはロードされると再利用されます。つまり、すべて同じテクスチャから描画される、膨大な数のスプライトと1つのスプライトがあります。

スプライトバッチノードを使用して同じテクスチャを使用するスプライトのレンダリング速度を上げることは引き続き適用され、強く推奨されますが、メモリ使用量には影響しません。

于 2012-11-22T19:52:27.563 に答える
2

CCSpriteBatchNodeはあなたの親友になります。

まず、使用するテクスチャファイルを使用してBatchNodeを作成します。

次に、100以上のスプライトをバッチに追加します。それらは1つのコピーテクスチャのみを使用します。

于 2012-11-22T06:56:40.613 に答える
1

m.dingの回答で、質問を解決しました。

これが解決策です。

ステップ 1) テクスチャをバッチ ノードとして定義します。

batchNode = CCSpriteBatchNode::create("mans.pvr.ccz");
this->addChild(batchNode);
CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile("mans.plist");

ステップ 2) バッチ ノードのテクスチャでスプライトを作成し、シーンに追加します。

CCSprite *man = CCSprite::createWithSpriteFrameName("body_black.png");
batchNode->addChild(man, 1, 1000);

ステップ 3) テクスチャを変更する場合は、バッチ ノードのキャッシュされたテクスチャを使用します。

((CCSprite *)this->getChildByTag(1000))->setDisplayFrame(CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName("body_red.png""));

それだけです〜。この助けを願っています!

更新: 「this」ではなく、バッチ ノードに追加します。:)

于 2012-11-22T11:25:02.613 に答える