首页 > 代码库 > 3.游戏优化(CCSpriteBatchNode)
3.游戏优化(CCSpriteBatchNode)
1 FPS含义
2渲染树的结构
3优化原理
CCSpriteBatchNode介绍
A先说下渲染批次:这是游戏引擎中一个比较重要的优化指标,指的是一次渲染调用。也就是说,渲染的次数越少,游戏的运行效率越高。
B CCSpriteBatchNode就是cocos2d-x为了降低渲染批次而建立的一个专门管理精灵的类。
C如果要加载1000个精灵,加载,渲染重复执行1000次,使用CCSpriteBatchNode批量渲染,一次渲染就把所有的CCSprite绘制出来。大量降低渲染批次。
4案例说明:
BachNode.h |
#ifndef__BACHNODE_H__ #define__BACHNODE_H__
#include"cocos2d.h" USING_NS_CC; classBachNode :publicCCLayer { public: staticCCScene *scene(); CREATE_FUNC(BachNode); boolinit();
virtualboolccTouchBegan(CCTouch *pTouch,CCEvent *pEvent); //创建BatchNode CCSpriteBatchNode *batchNode;
};
#endif |
BachNode.cpp |
#include"BachNode.h" #include"AppMacros.h"
CCScene *BachNode::scene() { CCScene *scene =CCScene::create(); BachNode *layer =BachNode::create(); scene->addChild(layer); returnscene; } boolBachNode::init() { CCLayer::init(); setTouchEnabled(true); setTouchMode(kCCTouchesOneByOne);
//初始化成员batchNode //batchNode = CCSpriteBatchNode::create("CloseNormal.png");
//第一步:通过CCSpriteBatchNode的方式进行添加 //将小图中的东西先绘制成一张大图,然后将它们缓存到CCSpriteFrameCache中了 CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile("batchnode/plant.plist"); //然后将大图渲染 batchNode =CCSpriteBatchNode::create("batchnode/plant.png"); //第二部:将batchNode添加到CCLayer中 addChild(batchNode);
returntrue; }
boolBachNode::ccTouchBegan(CCTouch *pTouch,CCEvent *pEvent) { staticboolflag =true; CCSprite *spr; for (inti = 0;i < 1000;i++) { //1.下面的方式是加载一张图的情况 //CCSprite *spr = CCSprite::create("CloseNormal.png"); //通过CCRANDOM_0_1()获得一个0到1的节点 //spr->setPosition(ccp(CCRANDOM_0_1() * 480, CCRANDOM_0_1() * 320)); //batchNode->addChild(spr);
//2.通过下面的方式加载两类图 if (flag) { //因为已经加载到缓存中,所以直接可以通过createWithSpriteFrameName加载图片 spr =CCSprite::createWithSpriteFrameName("p_2_01.png"); } else { spr =CCSprite::createWithSpriteFrameName("p_3_01.png"); } spr->setPosition(ccp(CCRANDOM_0_1() * 480, CCRANDOM_0_1() * 320)); //batchNode在头文件中定义的有 batchNode->addChild(spr); flag = !flag; } returnfalse; } |
运行结果: |
3.游戏优化(CCSpriteBatchNode)