首页 > 代码库 > 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()获得一个01的节点

       //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)