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;

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()获得一个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;

    }

    return false;

}

运行结果:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

涂作权的博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值