Cocos2d-x: Как оптимизировать память от 100 одинаковых спрайтов?

Моя задача - нарисовать один спрайт 100 раз в кадре. Например, мне нужно нарисовать строку из одного спрайта "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 ] );

}

И это проблема. Я выделяю память 100 раз только для одного спрайта, но я не знаю, как это сделать по-другому. Как я могу оптимизировать это? Есть ли способ в Cocos2d для рисования спрайта с использованием координат (x и y), но не для выделения памяти для каждого одного спрайта?

2 ответа

Решение

Ты в порядке. Все 100 спрайтов будут ссылаться на один и тот же текстурный объект, так что это всего лишь одна текстура в памяти. Каждый экземпляр sprite добавляет к этому менее 500 байт памяти.

Лучшим вариантом для сохранения памяти является использование формата изображений.pvr.ccz.

Потому что все 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);
}
Другие вопросы по тегам