我的任务是在帧中绘制一个精灵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)绘制精灵,但不为每个相同的精灵分配内存?
答案 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格式的图像。