1 fps含义
2
渲染树的结构
3
优化原理
ccspritebatchnode介绍
a
先说下渲染批次:这是游戏引擎中一个比较重要的优化指标,指的是一次渲染调用。也就是说,渲染的次数越少,游戏的运行效率越高。
b ccspritebatchnode就是cocos2d-x为了降低渲染批次而建立的一个专门管理精灵的类。
c
如果要加载1000个精灵,加载,渲染重复执行1000次,使用ccspritebatchnode批量渲染,一次渲染就把所有的ccsprite绘制出来。大量降低渲染批次。
4
案例说明:
bachnode.h
#ifndef
__bachnode_h__
#define
#include
"cocos2d.h"
using_ns_cc;
class
bachnode :public
cclayer
{
public:
static
ccscene *
scene();
create_func(bachnode);
bool
init();
virtual
cctouchbegan(cctouch
*ptouch,
ccevent *pevent);
//创建batchnode
ccspritebatchnode
*batchnode;
};
#endif
bachnode.cpp
"bachnode.h"
"appmacros.h"
ccscene *bachnode::scene()
scene =
ccscene::create();
bachnode *
layer =
bachnode::create();
scene->addchild(layer);
return
scene;
}
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);
true;
bachnode::cctouchbegan(cctouch
ccevent *pevent)
flag =
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
ccsprite::createwithspriteframename("p_3_01.png");
spr->setposition(ccp(ccrandom_0_1()
* 480, ccrandom_0_1() * 320));
//batchnode在头文件中定义的有
batchnode->addchild(spr);
flag = !flag;
false;
运行结果: