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);
}