使用纹理图集

纹理图集(Texture)也称为精灵表(Sprite Sheet)

使用纹理图集的优点:

1、减少文件读取次数,读取一张图片比读取一推小文件要快

2、减少OpenGL ES绘制调用并且加速渲染

OpenGL ES 1.1仅仅能够使用2的n次幂大小的图片(即宽度或者高度是2、4、8、64…)。

如果采用小图片OpenGL ES1.1会分配给每个图片2的n次幂大小的内存空间,即使这张图片达不到这样的宽度和高度也会分配大于此图片的2的n次幂大小的空间。那么运用这种图片集的方式将会减少内存碎片。

虽然在Cocos2d-x v2.0后使用OpenGL ES2.0,它不会再分配2的几次幂的内存块了,但是减少读取次数和绘制的优势依然存在。

3、减少内存消耗。

4、Cocos2d-x全面支持Zwoptex和TexturePacker,所以创建和使用纹理图集是很容易的

这样一张大图,可以让美工来完成,但是记得需要记下坐标,图集中小图的左上角坐标是多少,宽和高是多少,这是需要知道的。

这是很耗时的。实际上这是可以由软件(Zwoptex和TexturePacker)来完成的。

做出来的纹理图集由两部分构成。一部分是存有纹理的,也就是大图文件。另一部分就是里面精灵/小图的坐标等信息文件

plist文件是属性列表文件,一种xml文件。每一个小图称为帧(frame),每一个frame包含了该帧的名(key),坐标,高宽。是否旋转等。这是给程序读的

bool HelloWorld::init()

{

if ( !Layer::init() )

{

return false;

}

Size visibleSize = Director::getInstance()->getVisibleSize();

Vec2 origin = Director::getInstance()->getVisibleOrigin();

auto background = Sprite::create("background.png");

background->setAnchorPoint(Vec2::ZERO);

this->addChild(background,0);

auto mountain1 = Sprite::create("SpriteSheet.png",Rect(2,391, 934, 388));//截取图片

mountain1->setAnchorPoint(Vec2::ZERO);//设置锚点

mountain1->setPosition(Vec2(-200,80));//设置坐标

this->addChild(mountain1,0);

Texture2D* cache = Director::getInstance()->getTextureCache()->addImage("SpriteSheet.png");//加载整个图片到纹理缓存

auto hero1 = Sprite::create();

hero1->setTexture(cache);

hero1->setTextureRect(Rect(2,1706,391,327));//在纹理缓存中截取图片 左上角坐标 以及截取图片的宽高

hero1->setPosition(Vec2(800,200));

this->addChild(hero1,0);

return true;

}

源代码下载地址:

GITHUB源码下载地址:【点我进行下载】

精灵帧缓存

精灵帧缓存是缓存的一种,缓存有如下几种:

1、纹理缓存(TextureCache)

使用纹理缓存可以创建纹理对象

2、精灵帧缓存(SpriteFrameCache)

和纹理图集相对应,把plist文件读到内存,到文件里面创建精灵帧缓存,然后再从精灵帧缓存中获得精灵对象,反复使用精灵对象时候,使用精灵帧缓存可以节省内存消耗 ,将一个图读到精灵帧缓存中,同时也会加载到纹理缓存中

3、动画缓存(AnimationCache)

动画缓存主要用于精灵动画,精灵动画中的每一帧是从动画缓存中获取的

SpriteFrameCache *frameCache = SpriteFrameCache::getInstance();

frameCache->addSpriteFramesWithFile("SpriteSheet.plist");

//单例-将精灵图集的坐标读进去 根据这个坐标获取图集,这个加载过程是在游戏启动的时候加载,并不是在用的时候加载(肯定会占用很多内存的,不过现在手机一般内存都挺多的)

auto mountain1 = Sprite::createWithSpriteFrameName("mountain1.png");//缓存被创建后,可以通过frame名字(**注意名字冲突的问题,名字一样的精灵帧,后面的会覆盖前面的,可以加前缀以区分**)指定精灵帧来创建一个精灵 这个过程并不是通过大图去创建的,而是通过SpriteFrameCache缓存取出来的,这个速度很快

//还可以通过精灵帧来创建精灵

SpriteFrame *heroSpriteFrame = frameCache->getSpriteFrameByName("hero1.png");//通过精灵帧名字获取精灵帧

Sprite *hero1 = Sprite::createWithSpriteFrame(heroSpriteFrame);//通过精灵帧创建精灵

清空或移除精灵帧的缓存函数:

void removeSpriteFrameByName(const std::string& name);//指定具体的精灵帧名将精灵帧从缓存中移除,具体到精灵帧

void removeSpriteFrames();//指定清空所有的精灵帧缓存

void removeSpriteFramesFromFile(const std::string& plist);//指定具体的坐标文件(plist文件)移除精灵帧

void removeUnusedSpriteFrames();//移除没有使用的精灵帧

建议初学者不要轻易使用清除缓存函数!

小项目实例

现在还做不了太复杂的项目,在目前这个阶段

项目描述:

我们有这样一个场景,一个背景草地,山,和一个精灵牛仔(还没学帧动画,先做个静态的)。 把这三个精灵放到一个场景中,利用精灵帧缓存完成

背景没有放到精灵图集中去,这是因为背景是不需要透明的

bool HelloWorld::init()

{

if ( !Layer::init() )

{

return false;

}

Size visibleSize = Director::getInstance()->getVisibleSize();

Vec2 origin = Director::getInstance()->getVisibleOrigin();

auto background = Sprite::create("background.png");//加载背景精灵

background->setAnchorPoint(Vec2::ZERO);

this->addChild(background,0);

SpriteFrameCache *frameCache = SpriteFrameCache::getInstance();//单例对象

frameCache->addSpriteFramesWithFile("SpriteSheet.plist");//加载精灵图集

auto mountain1 = Sprite::createWithSpriteFrameName("mountain1.png");//通过精灵帧名创建精灵

mountain1->setAnchorPoint(Vec2::ZERO);//设置锚点

mountain1->setPosition(Vec2(-200,80));

this->addChild(mountain1,0);

SpriteFrame *heroSpriteFrame = frameCache->getSpriteFrameByName("hero1.png");//通过精灵帧名字获取精灵帧

Sprite *hero1 = Sprite::createWithSpriteFrame(heroSpriteFrame);//通过精灵帧创建精灵

//上面的两条语句相当于前面一条语句的效果auto mountain1 = Sprite::createWithSpriteFrameName("mountain1.png");

hero1->setPosition(Vec2(800,200));

this->addChild(hero1,0);

return true;

}

源代码下载地址:

GITHUB源码下载地址:【点我进行下载】

coco2dx精灵和背景遮挡_Cocos2d-x精灵的性能优化——使用纹理图集和精灵帧缓存...相关推荐

  1. coco2dx精灵和背景遮挡_Cocos2dx 如何实现对背景进行模糊处理以达到突出某一个Sprite?...

    展开全部 动作(Actions) move移动:moveto/moveby 从一个位置移动到另外一个位置 从一个位置移动多少636f7079323131333532363134313032313635 ...

  2. coco2dx精灵和背景遮挡_cocos2dx番外篇——更换精灵图片

    更换精灵CCSprite的图片有两种方式. 1.直接通过图片更换 使用setTexture(CCTexture2D*)函数,可以重新设置精灵类的纹理图片.// CCTexture2D* texture ...

  3. 【Cocos2d-x】Cocos2d-x精灵的性能优化

    Cocos2d-x精灵的性能优化-使用纹理图集和精灵帧缓存 使用纹理图集 纹理图集(Texture)也称为精灵表(Sprite Sheet) 使用纹理图集的优点: 1.减少文件读取次数,读取一张图片比 ...

  4. JS循环精灵图背景-遍历背景图片

    利用for循环设置一组元素的精灵图背景 如果用css做,需要每个小盒子都设置一遍,才能得到相应的图标 分析: 1.首先精灵图图片排列是有规律的 2.核心:利用for循环,修改背景位置 精灵图来源:卷皮 ...

  5. 本节作业之显示不同问候语、显示密码、关闭二维码、循环精灵图背景、显示隐藏文本框内容、密码框格式提示错误、京东关闭广告、新浪下拉菜单、开关灯、换肤、表格隔行变色、表单取消全选、tab栏切换、发布删除留言

    本节作业之显示不同问候语.显示密码.关闭二维码.循环精灵图背景.显示隐藏文本框内容.密码框格式提示错误.京东关闭广告.新浪下拉菜单.开关灯.换肤.表格隔行变色.表单取消全选.tab栏切换.发布删除留言 ...

  6. html精灵图资源,知识分享:HTML5+CSS3基础之CSS Sprites(CSS精灵)

    原标题:知识分享:HTML5+CSS3基础之CSS Sprites(CSS精灵) CSS Sprites介绍 Css sprites 可翻译为css精灵,也有人翻译为css雪碧,因为sprite也有雪 ...

  7. 用计算机弹精灵宝可梦音乐,《精灵宝可梦》图鉴402:可以演奏出优美音乐的精灵——音箱蟀...

    原标题:<精灵宝可梦>图鉴402:可以演奏出优美音乐的精灵--音箱蟀 本篇我们要介绍的宝可梦就是圆法师的进化型--音箱蟀,这只宝可梦和圆法师的外形差距小二个人认为还是蛮大的,在动画中,音箱 ...

  8. 【蓝牙Mesh笔记 ①】ESP32-C3 模组上实现天猫精灵蓝牙 BLE Mesh AliGenie 接入,无需WiFi 连接也可以实现天猫精灵语音控制。

    本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 系列一:ESP32系列模组基础学习系列笔记 1. 爬坑学习新旅程,虚 ...

  9. 【Android 性能优化】布局渲染优化 ( 过渡绘制 | 背景设置产生的过度绘制 | Android 系统的渲染优化 | 自定义布局渲染优化 )

    文章目录 一. 背景设置产生的过度绘制 二. Android 系统的渲染优化 1. 透明组件数据传递 2. GPU 存储机制 3. Android 7.0 之后的优化机制 三. 自定义布局渲染优化 一 ...

最新文章

  1. WebService客户端添加SOAPHeader信息
  2. 在新的数学证明中,人工智能取胜
  3. windows使用Win32DiskImager安装树莓派系统
  4. android shell hello world,Android Framework 之HelloWorld(三)
  5. 【机器视觉】 close_measure算子
  6. 第三十五期:当我们在讨论CQRS时,我们在讨论些神马?
  7. python列表用来有序存放一组_python入门第二课------列表
  8. Fedora 17 结实的奇迹:最新的OpenStack和JBoss
  9. 查看java运行时参数_查看JVM运行时参数
  10. java做文件显示器_JavaWeb显示器
  11. vue3新增Suspense组件
  12. 拯救天使 (BFS)
  13. VASSISTX在vs里面应用的快捷键
  14. 强烈推荐!PPT实战技巧精华归纳,有这一篇就够啦!
  15. (九) LBP特征提取
  16. 交通灯控制逻辑电路设计
  17. 优动漫PAINT实用宝典(图层篇)——栅格图层
  18. lol8月21号服务器维护,lol维护到几点今天?英雄联盟LOL8月21日维护更新内容
  19. 每日170219-20
  20. 狂神Springboot笔记

热门文章

  1. 关于古月居 moveit rviz gazebo联动碰到的问题
  2. Android手机病毒“三宗罪”
  3. 计算机显示器画面的清晰度由显示器的,电脑显示器画面模糊如何处理
  4. java 谷歌身份验证器
  5. lol多玩盒子 v4.2.9 官方版
  6. html动画隐藏一段时间内自动显示,《网页设计与制作》试卷A答案
  7. 使用Arthas进行生产代码热修复
  8. 儿时数学课上的“百钱百鸡”问题我又捡起来了
  9. [转]PID算法与直流电机的PWM技术控制()
  10. 上海哇麦信息技术有限公司广州分公司面经(凉)