1

私の仕事は、1 つのスプライトをフレーム内に 100 回描画することです。たとえば、1 つのスプライト「sprite.png」で構成される行を描画する必要があります。私はこのようにします:

CCSprite *spriteArr[ 100 ];

for ( unsigned int i = 0; i < 100; i++ ) {

    spriteArr[ i ] = new cocos2d::CCSprite();
    spriteArr[ i ]->initWithFile( "sprite.png" );
    spriteArr[ i ]->setPosition( cocos2d::CCPoint( i * 10, 100 ) );

    this->addChild( spriteArr[ i ] );

}

そして、それが問題です。1つのスプライトだけに100回メモリを割り当てますが、別の方法がわかりません。どうすれば最適化できますか?Cocos2d で座標 (x と y) を使用してスプライトを描画する方法はありますが、同じスプライトごとにメモリを割り当てる方法はありませんか?

4

2 に答える 2

6

100 個のスプライトすべてが同じテクスチャを使用しているため、最善の方法は を使用することCCSpriteBatchNodeです。1 回の OpenGL 呼び出しでそれらを描画します。

CCSpriteBatchNode* batchNode = CCSpriteBatchNode::create("sprite.png", 100);
batchNode->setPosition(CCPointZero);
this->addChild(batchNode);

for(int i = 0;i < 100;++i)
{
   CCSprite* sprTest = CCSprite::createWithTexture(batchNode->getTexture());
   sprTest->setPosition(ccp(i*10,100));
   batchNode->addChild(sprTest);
}
于 2013-04-05T04:25:53.183 に答える
4

あなたは上手い。100 個のスプライトはすべて同じテクスチャ オブジェクトを参照するため、これはメモリ内の 1 つのテクスチャにすぎません。各スプライト インスタンスは、その上に 500 バイト未満のメモリを追加します。

メモリを節約する最善の方法は、画像に .pvr.ccz 形式を使用することです。

于 2013-04-05T08:04:49.900 に答える