zoukankan      html  css  js  c++  java
  • Cocos2d-x优化中图片优化


    在2D游戏中图片无疑是最为重要的资源文件,它会被载入到内存中转换为纹理,由GPU贴在精灵之上渲染出来。它能够优化的方面非常多。包含:图片格式、拼图和纹理格式等,以下我们从这几个方面介绍一下图片和纹理的优化。
    1.选择图片格式
    要回答这个问题。我们须要先了解一下眼下在移动平台所使用的图片文件格式。以及这些图片格式Cocos2d-x是否支持。图片格式有非常多,可是在移动平台主要推荐使用的PNG,JPG也能够考虑。而其他的文件格式最好转化成为PNG格式。我们先了解一下它们的特点。


    1、PNG文件
    PNG文件格式设计目的是替代GIF和TIFF文件格式,是一种位图存储格式。PNG是採用无损压缩,能够有Alpha通道数据支持透明,但不支持动画。PNG能够保存高保真的较复杂的图像。可是文件比較大。

    PNG格式具体又分为:PNG8和PNG24,后面的数字则是代表这样的PNG格式最多能够索引和存储的颜色值。
    2、JPG
    JPG全名是JPEG。JPG图片以 24 位颜色存储单个位图图形。JPG是与平台无关的格式,支持最高级别的压缩,压缩比率能够高达 100:1,这样的压缩是以牺牲图像质量为代价的。换取更小文件大小。JPG不支持透明。JPG比較支持摄影图像或写实图像作品,这是由于它们颜色比較丰富。而对于所含颜色非常少、具有大块颜色相近的区域或亮度差异十分明显的较简单的图片,JPG就不太适合了。


    那么我们选择JPG还是PNG呢?非常多人觉得JPG文件比較小,PNG文件比較大,载入到内存纹理。JPG占有更少的内存。这样的观点是错误的!纹理与图片是不同的两个概念,假设纹理是野营帐篷话。那么图片格式是收纳折叠后的帐篷袋子。装有帐篷的袋子大小,不能代表帐篷搭起来后的大小。特别是在Cocos2d-x平台JPG载入后被转化为PNG格式。然后再转换为纹理,保存在内存中。这样无形中添加了对JPG文件解码的时间,因此不管JPG在其他平台表现的多么不俗,可是在移动平台下一定它无法与PNG相提并论。











    2.拼图
    不知道大家是否有过这样的一个疑问,为什么要把场景中小图片都拼接成一个大图片呢?这个问题我们在使用精灵表的时候简单说了一下,这一节我们具体介绍一下它原因。
    假设把多个小图拼接称为一个大图(纹理图或精灵表),能够降低IO操作。而且使用散图每次都要针对一个图,创建精灵加入到纹理缓存。假设非常频繁而大量创建。对于CPU和内存的开销非常高。而使用大图。则一次性将创建精灵帧缓存,并把它们纹理加入到纹理缓存中,这样会明显地提高效率。
    在进行图片拼接的时候,假设能够满足用户保真度情况下,大图越小当然是越好。我们能够通过TexturePacker等纹理拼图工具,设置纹理支持NPOT,这些工具的使用大家能够參考我们的(《Cocos2d-x实战(卷Ⅳ):工具具体解释》)。
    那么什么是NPOT呢?NPOT是“non power of two”的缩写,意思是非2的N次幂。在OpenGL ES1.1时候纹理图片要求是2的N次幂(即,POT)。否则纹理无法创建。POT要求下使用纹理工具拼接成的大图。能够会有非常多的空白区域。例如以下图所看到的,右下角另一些空白区域,造成了浪费,也会同一时候添加图片的大小。下图所看到的的图片大小是2048KB。

    POT拼图
    OpenGL ES2.0后支持了NPOT。我们不须要为图片是否为2的N次幂而苦恼,如图所看到的,是採用NPOT拼图。整个图片基本上没有大的空白区域。能充分地利用了图片空间。20-24所看到的的图片大小是1822KB,节省了200KB,200KB已经非常了不起了。



    NPOT拼图


    很多其他内容请关注最新Cocos图书《Cocos2d-x实战 C++卷》
    本书交流讨论站点:http://www.cocoagame.net
    很多其他精彩视频课程请关注智捷课堂Cocos课程:http://v.51work6.com
    欢迎加入Cocos2d-x技术讨论群:257760386


    《Cocos2d-x实战 C++卷》现已上线,各大商店均已开售:

    京东:http://item.jd.com/11584534.html

    亚马逊:http://www.amazon.cn/Cocos2d-x%E5%AE%9E%E6%88%98-C-%E5%8D%B7-%E5%85%B3%E4%B8%9C%E5%8D%87/dp/B00PTYWTLU

    当当:http://product.dangdang.com/23606265.html

    互动出版网:http://product.china-pub.com/3770734

    《Cocos2d-x实战 C++卷》源代码及样章下载地址:

    源代码下载地址:http://51work6.com/forum.php?mod=viewthread&tid=1155&extra=page%3D1 

    样章下载地址:http://51work6.com/forum.php?mod=viewthread&tid=1157&extra=page%3D1

    欢迎关注智捷iOS课堂微信公共平台
  • 相关阅读:
    Android中Context具体解释 ---- 你所不知道的Context
    JDK6、Oracle11g、Weblogic10 For Linux64Bit安装部署说明
    matplotlib 可视化 —— 定制 matplotlib
    matplotlib 可视化 —— 移动坐标轴(中心位置)
    matplotlib 可视化 —— 移动坐标轴(中心位置)
    matplotlib 可视化 —— 定制画布风格 Customizing plots with style sheets(plt.style)
    matplotlib 可视化 —— 定制画布风格 Customizing plots with style sheets(plt.style)
    指数函数的研究
    指数函数的研究
    指数分布的研究
  • 原文地址:https://www.cnblogs.com/blfbuaa/p/6923905.html
Copyright © 2011-2022 走看看