TexturePacker是一款把若干资源图片拼接为一张大图的合图工具,在游戏开发以及网页制作中经常会使用到这个工具。为什么需要使用这个工具呢?

1.我们知道,大部分游戏引擎底层的渲染方式都是基于OpenGL的,但是,你知道吗?OpenGL载入纹理图片时,所用内存会自动扩张到2的N次方。比如,一张图片的大小为10*10像素,OpenGL会按照16*16的规格将图片载入到内存中;如果图片大小为64*65,那么就会按照64*128载入了,这就造成了内存的无必要开销。

具体浪费了多少内存空间呢?

我们这里需要了解一个概念:图片格式(Image format)。图片格式有RGBA8888、RGBA4444、RGBA5555、RGB888等等。假如我们使用的图片格式为RGBA8888,也就是说图片每个像素点都由R、G、B、A4个值组成,每个值占用8位(值为0-255),那么一个像素点会占用8位*4=32位=4字节。所以图片大小为64*65时我们按照64*128载入,此时会造成64*(128-65)*4字节=16128字节=15.75KB的内存空间浪费,要知道整张图片的大小才有64*65*4/1024=16.25KB。

所以,在游戏开发使用图片资源时,我们要尽量保证图片的大小在接近且不大于2的整数倍,理想状态下,如果每一张图的长宽都恰好是2的n次方数值,就不会有任何浪费了。TexturePacker正是帮助我们将图片资源进行这样优化的一款软件。

2.另外,TexturePacker不仅能帮助我们在加载图片时节省内存,它将很多小图拼接成一张大图后,合成的大图会比之前所有的散图所占用的物理存储更小,也许一堆散图的大小为20KB,将它们合成一张大图后可能就变成了10KB,这样便从而通过减小图片资源物理存储大小起到压缩游戏安装包的作用。

3.最后,将很多小图拼接成一张大图,载入内存时一次载入,提高了载入速度。

二.如何获得TexturePacker的激活码

一般我们下载的TP都是试用7天的,但是TexturePacker的作者Andreas人很nice,你可以向他申请激活码:https://www.codeandweb.com/request-free-license ,不过要求就是你自己要有关于游戏开发的博客,Andreas会根据你的博客决定是否给你激活码:

一般申请几天后就会有回复(在这里还要谢谢Andreas啦):

三.使用TexturePacker合图

TP这个软件其实很好用。打开TexturePacker软件:

我们先看软件最上方的选项:

分别为:新创建一个TP工程;

打开一个文件夹;

保存现在对图片的操作;

添加一些图片;

添加一个文件夹里的所有图片;

删除正在操作的图片;

发布TP工程。

这里有还一些地方需要注意:

1.Output-DataFormat:压缩成支持什么引擎的文件,如cocos、unity等:

 

2.Geometry-Size constraints :

POT(Power of 2):导出的大图为大小是2的N次方的方形图;

Anysize:任何尺寸都可以,所以它导出的图的尺寸是最小的;

NPOT(Anysize but power of 2)与POT区别就是导出的图为矩形。

3.Output-Image format:图片格式,上面提到过,比如RGBA8888,图片每一个像素点由R、G、B、A四个值组成,每个值占8位。

我们看软件的右下角显示的size,这就是合图加载到内存中会占用的内存大小:

若选择RGBA4444占用的内存大小会减少一半,这样会节省一倍内存,代价就是图片质量有损失,但由于算法存在这种损失是极小的。

我们新建一个项目,导入图片资源并设置相关属性,就可以发布了。这里我将6个按钮图片合成了一张大图。发布后会生成两个文件,一个保存各图片信息的.plist文件和一个.png格式的大图。

      

四.使用代码加载合图,并创建sprite

用TP发布出来文件后,接下来我们要在工程项目中通过代码使用合图。

在这之前我们要将.plist和.png文件拷到工程的res文件目录下;

1.首先需要加载合图

[cpp] view plain copy  
  1. //加载TP文件
  2. //参数:1.plist文件名 2.png文件名
  3. SpriteFrameCache::getInstance()->addSpriteFramesWithFile("TPtest.plist","TPtest.png");

可以看到,我们通过精灵帧缓存的单例对象将合图加载到了工程中,使用的方法为addSpriteFramesWithFile(),也就是说合图中的图片资源都是以精灵帧的形式存储起来的

2.加载完资源后,我们就可以使用合图里的图片资源了。比如之前我的博客中讲过精灵的3种创建方法,其中有一种就是通过精灵帧创建精灵

[cpp] view plain copy  
  1. //使用TP合图里的资源创建精灵
  2. auto _sprite = Sprite::createWithSpriteFrameName("Button01.png");
  3. addChild(_sprite);

运行结果:

以上。

TexturePacker使用详解相关推荐

  1. COCOS学习笔记--TexturePacker使用详解

    一.TexturePacker的优点 TexturePacker是一款把若干资源图片拼接为一张大图的合图工具,在游戏开发以及网页制作中经常会使用到这个工具.为什么需要使用这个工具呢? 1.我们知道,大 ...

  2. 从命令行到IDE,版本管理工具Git详解(远程仓库创建+命令行讲解+IDEA集成使用)

    首先,Git已经并不只是GitHub,而是所有基于Git的平台,只要在你的电脑上面下载了Git,你就可以通过Git去管理"基于Git的平台"上的代码,常用的平台有GitHub.Gi ...

  3. JVM年轻代,老年代,永久代详解​​​​​​​

    秉承不重复造轮子的原则,查看印象笔记分享连接↓↓↓↓ 传送门:JVM年轻代,老年代,永久代详解 速读摘要 最近被问到了这个问题,解释的不是很清晰,有一些概念略微模糊,在此进行整理和记录,分享给大家.在 ...

  4. docker常用命令详解

    docker常用命令详解 本文只记录docker命令在大部分情境下的使用,如果想了解每一个选项的细节,请参考官方文档,这里只作为自己以后的备忘记录下来. 根据自己的理解,总的来说分为以下几种: Doc ...

  5. 通俗易懂word2vec详解词嵌入-深度学习

    https://blog.csdn.net/just_so_so_fnc/article/details/103304995 skip-gram 原理没看完 https://blog.csdn.net ...

  6. 深度学习优化函数详解(5)-- Nesterov accelerated gradient (NAG) 优化算法

    深度学习优化函数详解系列目录 深度学习优化函数详解(0)– 线性回归问题 深度学习优化函数详解(1)– Gradient Descent 梯度下降法 深度学习优化函数详解(2)– SGD 随机梯度下降 ...

  7. CUDA之nvidia-smi命令详解---gpu

    nvidia-smi是用来查看GPU使用情况的.我常用这个命令判断哪几块GPU空闲,但是最近的GPU使用状态让我很困惑,于是把nvidia-smi命令显示的GPU使用表中各个内容的具体含义解释一下. ...

  8. Bert代码详解(一)重点详细

    这是bert的pytorch版本(与tensorflow一样的,这个更简单些,这个看懂了,tf也能看懂),地址:https://github.com/huggingface/pytorch-pretr ...

  9. CRF(条件随机场)与Viterbi(维特比)算法原理详解

    摘自:https://mp.weixin.qq.com/s/GXbFxlExDtjtQe-OPwfokA https://www.cnblogs.com/zhibei/p/9391014.html C ...

最新文章

  1. SpringBoot2.0实现静态资源版本控制
  2. 2018深圳国际零售信息化暨无人售货展
  3. Android检测网络是否正常代码!
  4. IBM科学家凌棕:欧美国家的智慧交通与管理
  5. C++primer 13.1.2节练习
  6. candence的图纸大小设置_标准制图图纸尺寸大小
  7. Windows磁盘格式、分区格式及类型
  8. CAD如何绘制带有弧形的箭头
  9. TSC2004 电阻式触摸屏控制器驱动问题
  10. 全名k歌自定义图文链接(卡片)
  11. 【CTF题解NO.00003】moeCTF 2020 - official write up by arttnba3
  12. 软件测试:什么样的公司需要专职测试?
  13. 无损音频压缩——APE和FLAC比较
  14. 一步步实现windows版ijkplayer系列文章之三——Ijkplayer播放器源码分析之音视频输出——音频篇
  15. 【GD32F310开发板试用】GD电机驱动底层配置——永磁同步电机控制
  16. 模拟信号,数字信号,基带信号,宽带信号,频带信号
  17. 离散数学班委成员选举,王小红,李强,丁金生,python实现
  18. 众达说两化融合A042A=程序文件之信息资源需要包含那些内容
  19. 虚拟化之Proxmox VE安装教程
  20. Max基于等高线制作三维地形

热门文章

  1. 基址比例变址寻址(Base Index Scale Addressing)
  2. 云计算平台包含哪些?是如何划分的?
  3. 根据AD账号直接单点登录到第三方系统
  4. iPhone X,iPhone XS,iPhone XR,iPHone XS Max 适配(只说实现,不BB)
  5. 一刀工具箱-短链接生成工具
  6. 使用SwiftyJSON解析JSON
  7. 【每日AI】什么是矢量字库?
  8. Apple M1 Sourcetree 卡 卡顿 卡死
  9. 关于strncpy这个函数
  10. _snprintf_s与_snprintf