Cocos2d-x:如何从100个相同的精灵中优化内存?

时间:2013-04-05 00:49:39

标签: cocos2d-iphone cocos2d-x ccsprite ccspritebatchnode

我的任务是在帧中绘制一个精灵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 个答案:

答案 0 :(得分:6)

因为所有100个精灵都使用相同的纹理,所以最好的方法是使用CCSpriteBatchNode。它将在一个单独的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);
}

答案 1 :(得分:4)

你很好。所有100个精灵都将引用相同的纹理对象,因此它只是内存中的单个纹理。每个精灵实例在其上添加少于500字节的内存。

节省内存的最佳选择是使用.pvr.ccz格式的图像。