Cocos2dx对精灵的优化
原文:http://www.cocoachina.com/bbs/read.php?tid=196135 cocos2dx针对游戏设计的不同方面会有不同的优化方案,可以对声音,对内存,对图片格式,对色彩等等进行优化。有关这些方面的方法请大家查找其他的文章。我今天要说的是如何对精灵进行优化,程序中我们用到的最多的就是精灵,大到背景、UI,小到 NPC、道具,只要是用图片展示的,都是精灵或它的子类。精灵是什么,在我看来精灵就是一张纹理图片,是按某种方式显示出来的图片。精灵如此的重要,我们当然要好好的优化优化了。我们可以减小精灵图片的大小,使用缓存Cache的方法将精灵提前加载到内存中,当有很多精灵的时候,使用批次渲染的方法。所以我就从缓存和批次渲染这俩个方面来说一下如何优化我们的精灵图片。
上边的这种情况是采用一般的方式将精灵添加到层中的,这个时候的渲染批次是10。
9
10
11
12
13
14
|
//创建一个CCSpriteBatchNode,传入的参数就是精灵们将要用到的图片
CCSpriteBatchNode * batchNode = CCSpriteBatchNode::create(
);
//或者使用texture2d初始化,里边传入一个texture
//CCSpriteBatchNode * batch = CCSpriteBatchNode::createWithTexture();
//这一句写不写都可以,因为node的默认坐标就是(0,0)
batchNode->setPosition(CCPointZero);
i=0;i<10;i++)
{
//创建的这些精灵所使用的纹理必须和CCSpriteBatchNode相同,而且所有这些精灵必须在同一个渲染层
CCSprite * sprite = CCSprite::createWithTexture(batchNode->getTexture());
}
->addChild(batchNode);
|
"fire.png"
);
i=0;i<10;i++)
{
//CCParticleSun里边没有参数
CCParticleSystem * particle = CCParticleSun::create();
particle->setTexture(texture);
particle->setPosition(ccp(CCRANDOM_0_1()*visibleSize.width,CCRANDOM_0_1()*visibleSize.height));
->addChild(particle);
15
CCParticleBatchNode * particleBatch = CCParticleBatchNode::createWithTexture(texture);
//也可以采用如下的方式创建
//CCParticleBatchNode * particleBatch = CCParticleBatchNode::create("fire.png");
i=0;i<10;i++)
{
//CCParticleSun里边没有参数
CCParticleSystem * particle = CCParticleSun::create();
//传入的texture必须和CCParticleBatchNode相同
particle->setTexture(texture);
particleBatch->addChild(particle);
}
->addChild(particleBatch);
这里的道理是和CCSpriteBatchNode相同的,就不用解释了吧。
2、使用缓存提前加载精灵。当我们使用纹理的时候可以制作一个loading界面,将将要用到的纹理加载到缓存中,同时将它们的引用计数增加一,以便这些纹理不会被释放。用的时候直接从缓存中取就可以了,这样也可以提高效率。我们用到的缓存类有CCTextureCache、CCSpriteFrameCache、CCAnimationCache,下面分别说明其用法。