对于性能来说,很多情况都是用空间换时间。 然后在尽量减少空间的占用,在两者之间做抉择。

首先我们了解一下性能指标

  1. 帧率:每秒游戏循环执行的次数,即每秒多少帧 越高越好
  2. drawcall: 一帧中游戏调用gpu绘制图形次数,越少越好 3 . cpu性能: cpu执行速度,越快越好 4 . gpu性能: gpu执行速度,越快越好 5 . 内存: 游戏资源占用的运行时空间, 越低越好 6 . 网络请求数: 请求网络下载资源,越少越好 7 . 加载速度: 将硬盘中的资源加载到内存中,越快越好 8 . 包体大小: 游戏包大小,越小越好 9 . 节点数量: 游戏中存在的节点数量,越少越好

合并图集:

这是一个地球人都知道的手段。那为什么要合并图集?也只是将给初级开发者听听而已。 来一个cocoscreator的链接:https://docs.cocos.com/creator/manual/zh/asset-workflow/atlas.html

首先我们要了解,xxgl 的绘图过程都做了什么?

  1. 启用对应的着色器程序

    this.gl.useProgram(this.program);
  2. 绑定纹理
    this.gl.bindTexture(gl.TEXTURE_2D, batchNode.getTexture().getTexture());
  3. 传递顶点数据
      let n = indexList.length;let indices = new Uint8Array(indexList);//放入缓冲区let buffer = this.buffer.initBuffers(vertices, 'vertices');let persize = vertices.BYTES_PER_ELEMENT;// 设置数据 这里可以优化let pointer = program.setPointer('a_Position', 3, gl.FLOAT, false, persize * count, 0);let texPointer = program.setPointer('a_TexCoord', 2, gl.FLOAT, false, persize * count, persize * 3);this.buffer.initBuffers(indices, 'indices', this.gl.ELEMENT_ARRAY_BUFFER);
  4. 执行绘制
     let u_Sampler = program.getUniformLocation('u_Sampler');if (!u_Sampler) {console.log('Failed to get the storage location of u_Sampler');return false;}gl.uniform1i(u_Sampler, 0);//调用一次drawcall加一gl.drawElements(gl.TRIANGLES, n, gl.UNSIGNED_BYTE, 0);

合并图集的作用在哪里?

在着色器程序不变的情况下,如果我们很多sprite 使用的都是一张纹理上的碎图,只是纹理坐标不同,那我们就可以在第3步传递数据的时候做文章,其他几步就可以不动,然后让绘制一次完成。相反的,如果有两个sprite使用了不同的纹理,那么就需要绑定两次纹理。这些步骤就需要再执行一次。drawcall也就变成了2。 显然合并图集已经影响了帧率和drawcall。

对内存和包体的影响

  1. 这里先说明纹理所占内存的计算公式:长x宽x一个像素点的字节数。
  2. 如果碎图有白边的话合成图集会省去一部分内存,这个cocos官方已经说了;
  3. 其次,不论是png还是jpg格式,每张图片都会有头部信息,如果合并图集,也就是说如果有两张图片就少了一张图片的头部信息,如果多张呢?自然是省了内存又减小包体。
  4. 虽然合并图集会产生一个plist配置文件,增大了一些内存和包体的占用,但是对于减少的量来说是可以忽略的。
  5. 如果图集包含的碎图越多,节省的空间就越多。如果只是那么三五张图篇,打成图集可能没有省出多少空间。所以对于单张很大的背景图就不建议使用了。毕竟尺寸的限制是2048*2048,合并不了几张还产生了plist文件。
  6. 如果图集使用不当,模块使用的资源划分的不是很标准,也会出现一个图集利用率的问题。也可以理解为内存的浪费,例如打开的一个界面中就用到了图集中的几张碎图。所以使用图集的时候要注意图片资源的划分情况。

对网络请求次数的影响

这个是显而易见的,十张图请求十次,合成图集就请求两次(因为多出一个plist文件)。省了很多网络链接的过程。但是要注意图集的大小和体积,过大的图集也会造成不良影响。

对加载速度的影响

首先我们要看看文件读写的步骤:

  1. 首先建立通道。
  2. 然后建立数据存储空间。
  3. 然后开始读写数据。
  4. 关闭流。 合并图集肯定会减少流的开启和关闭的次数,自然省去了不少加载时间。

    结语

    总体来看,合并图集的好处真是太多了,没有理由不用啊! 欢迎扫码关注公众号《微笑游戏》,浏览更多内容。 欢迎扫码关注公众号《微笑游戏》,浏览更多内容。

游戏开发优化篇之合并图集相关推荐

  1. 【手机游戏开发优化篇】详解手游[体积]及[运行内存]的优化篇!

    本站文章均为李华明Himi原创,转载务必在明显处注明:(作者新浪微博:@李华明Himi) 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/android- ...

  2. 世嘉MD游戏开发进阶篇【三】:向量归一化的实现及应用

    向量归一化是非常有用的,游戏中经常能用到,就说大家都见过的,FC魂斗罗的敌人发射子弹就能用到了,敌人向玩家发射子弹首先要获取到向量,这个向量不能直接作为方向去用,必须要经过归一化处理才行,经过归一化处 ...

  3. C语言游戏开发SDL篇

    在 CSDN 博客发现一些分享的好文章,但暂时不懂如何收藏,先写文章将这些网址收录,目后随时方便自己翻阅 2018年10月26日 =================================== ...

  4. 【手游开发优化篇】cocos2d-x内存管理优化(内存是游戏的硬伤)

    2014年05月24日更新 以前的关注点都是 怎么用 根本没有往深层次追踪过.为什么这么用.今天记录下: 如果我们用的是pvr.ccz的图片 加载到内存中是根据你到处是的像素格式来渲染到ui中.如到处 ...

  5. 【iOS-cocos2d-X 游戏开发之八】使用Lua脚本进行游戏开发(基础篇)

    对于游戏公司而言,采用游戏脚本lua.python等进行开发也很常见,但是很多童鞋对脚本并没有很熟悉的概念,本篇则向大家简单介绍脚本的用途以及在Cocos2dx基础用法: Lua和python这些详细 ...

  6. 使用Lua脚本进行游戏开发(基础篇)

    对于游戏公司而言,采用游戏脚本lua.python等进行开发也很常见,但是很多童鞋对脚本并没有很熟悉的概念,本篇则向大家简单介绍脚本的用途以及在Cocos2dx基础用法: Lua和python这些详细 ...

  7. 在Cocos2dX游戏中使用Lua脚本进行游戏开发(基础篇)

    对于游戏公司而言,采用游戏脚本lua.python等进行开发也很常见,但是很多童鞋对脚本并没有很熟悉的概念,本篇则向大家简单介绍脚本的用途以及在Cocos2dx基础用法: Lua和python这些详细 ...

  8. Unity优化篇——mesh合并

    一.mesh合并大体分为: 1.合并网格 2.合并贴图 3.附加材质 4.重新计算UV 这里提一下附加材质,附加材质是对合并后的mesh重新赋予了一个material.废话不多说上代码! 备注:代码大 ...

  9. [游戏开发][渲染篇][第一篇]渲染的本质

    什么是渲染,一句话,每个像素塞入颜色拼成一张图就是渲染. 宏观上看,渲染就是让用户在显示器上看到物体的图像,微观上看,渲染就是显示器的每个单元上显示它该呈像的颜色.既然要呈像颜色则必然要获取颜色,计算 ...

最新文章

  1. STARTUP报错:ORA-00205: error in identifying control file, check alert log for more info
  2. MyBatis 注释
  3. Tomcat报错:Failed to start component [StandardEngine[Catalina].StandardHost[localhost]]
  4. ML:MLOps系列讲解之《基于ML的软件的三个层次之02 Model: Machine Learning Pipelines——2.5 Different forms of ML workfl》解读
  5. 新手如何从0开始做东南亚电商lazada平台?
  6. 软件项目管理0824:标书中疫情条款
  7. 9.控制流语句_for循环
  8. 总结MySQL建表、查询优化实用小技巧
  9. piggy back是什么意思?
  10. 中兴盒子ZTE-B860AV1.1T、AV2.1-通刷-线刷固件
  11. CSS3实现动画效果
  12. CHM文件的搜索功能帮助(摘自MSDN).
  13. 幸运童年童装 研发制造营销
  14. win10输入法不显示图标并且只有英文的有效解决方法
  15. pgsql中实现按周统计,计算日期是周几
  16. codeforce 332B Maximum Absurdity
  17. 2020-03-09
  18. java写的网络版斗地主_Java实现简单的斗地主游戏
  19. maven-cxf自动生成wsdl与xsd文件
  20. Web of Science 检索使用教程

热门文章

  1. 微型计算机内存采用什么结构,微型计算机的结构(CPU和内存)
  2. NFT项目遇冷,熊市下如何寻求新的叙事玩法?
  3. ant 命令语法不正确
  4. MATLAB“figure”和“imshow“联合使用示例
  5. Graphics.MeasureString用指定的字体绘制时测量指定的字符串
  6. 双系统 Ubuntu 磁盘分区方案
  7. 萝卜家园 Ghost XP 选择版 0712
  8. 关于ACCESS下OleDbParameter的使用
  9. DROO demo_on_off.py
  10. luogu P2047 社交网络