在日常开发过程中,有时候开发中一个界面可能会包含海量的精灵,下面就是对海量精灵的案例情况进行分析。
直接就是代码:
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数值越大越好。
*关于优化的问题后面会继续讲解…..