海量精灵 SpriteBatch

海量精灵优化实践

在日常开发过程中,有时候开发中一个界面可能会包含海量的精灵,下面就是对海量精灵的案例情况进行分析。
直接就是代码:

1. 首先是创建一个图层项目:
   BatchNodeLayer.h
   BatchNodeLayer.cpp
   具体实现代码:
1.1 
#ifndef __BatchNodeLayer_H__
#define __BatchNodeLayer_H__

#include "cocos2d.h"
#include "extensions/cocos-ext.h"
#include "ui/CocosGUI.h"
//这就是使用了第三方库了,要是使用vs进行编译的话,需要引入外部库文件。方法在博客中也有讲到  http://blog.youkuaiyun.com/haojie2014/article/details/45203751
using namespace cocos2d;
using namespace cocos2d::extension;
using namespace ui;

class BatchNodeLayer : public cocos2d::Layer{
public:
    //初始化的方法
    virtual bool init();

    //Cocos2d-x中定义的一个宏,创建指定类型的对象
    //并做好相应的初始化与释放工作
    CREATE_FUNC(BatchNodeLayer);
};
1.2
#include "BatchNodeLayer.h"
USING_NS_CC;

//实现BatchNodeLayer类中的init方法,初始化布景
bool BatchNodeLayer::init()
{
    if (!Layer::init()) {
        return false;
    }
    //获取可见区域尺寸
    Size visibleSize = Director::getInstance()->getVisibleSize();
    //获取可见区域原点坐标
    Point origin = Director::getInstance()->getVisibleOrigin();

    //添加有颜色的背景层
    LayerColor *background = LayerColor::create( Color4B(221,251,221,255));
    this->addChild(background, -20);

    //创建一个包含"精灵性能演示"内容的文本标签
    auto label = LabelTTF::create("\u7cbe\u7075\u6027\u80fd\u6f14\u793a", "fonts/FZKATJW.ttf", 40);
    //设置标签字体的颜色return true;
    label->setFontFillColor(Color3B::YELLOW);
    label->setPosition(Vec2(origin.x + visibleSize.width/2,
                            origin.y + visibleSize.height - label->getContentSize().height));
    //将文本添加到布景
    this->addChild(label, 1);
    //定义一个计数器,统计精灵对象的个数
    int count = 0;
    for (int j = 0; j < 8; j++) {
        int p=j%4;                             //创建一个变量,用来控制所截取矩形的起始位置
        Rect recta(p*64, 0, 64, 117);          //创建用于截取精灵图片的矩形区域对应的矩形对象
        for (int i = 0; i < 80; i++)
        {
            auto sp = Sprite::create("sprites.png", recta);        //创建精灵对象
            sp->setAnchorPoint(Point(0, 0));                      //设置锚点
            sp->setPosition(Point(origin.x + 10 * i, origin.y + 70 * j));
            this->addChild(sp);                                   //将精灵添加到布景里面
            count++;                                              //每添加一个人精灵对象计数器加1 
        }
    }
    return true;
}
2. 创建管理项目:
   BatchNodeSceneManager.h
   BatchNodeSceneManager.cpp
   具体实现代码:   
2.1 
#ifndef __BatchNodeSceneManager_H__
#define __BatchNodeSceneManager_H__

#include "cocos2d.h"
#include "BatchNodeLayer.h"      //引用文件

//用于创建场景的类
class BatchNodeSceneManager
{
public:
    //创建场景对象的方法
    static cocos2d::Scene* createScene();
};
#endif
2.2
#include "BatchNodeSceneManager.h"
USING_NS_CC;
using namespace cocos2d;

//实现BatchNodeSceneManager类中的createScene方法
Scene* BatchNodeSceneManager::createScene()
{
    //创建一个场景对象
    auto scene = Scene::create();

    //创建一个欢迎布景对象
    auto layer = BatchNodeLayer::create();

    //将欢迎布景添加到场景中
    scene->addChild(layer);

    //返回场景
    return scene;
}
3. 在AppDelegate.cpp里面调用:
引入头文件:
#include "BatchNodeSceneManager.h"
创建场景:
auto scene = BatchNodeSceneManager::createScene();

运行结果:

海量精灵结果图片

由上面的图片可以看到左下角有三行数值:
1. GL vert:标示OpenGL的顶点数,
2. GL calls: 绘制调用次数,
3. FPS :实施帧速率
1、2:数值越小性能越好, 3数值越大越好。
*关于优化的问题后面会继续讲解…..

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值