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; class BachNode :public CCLayer { public: static CCScene * scene(); CREATE_FUNC(BachNode); bool init();
virtual bool ccTouchBegan(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); return scene; } bool BachNode::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);
return true; }
bool BachNode::ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent) { static bool flag = true; CCSprite *spr; for (int i = 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; } return false; } |
运行结果:
|