zoukankan      html  css  js  c++  java
  • 转 cocos2d-x 优化(纹理渲染优化、资源缓存、内存优化)

    概述

    包括以下5种优化:引擎底层优化、纹理优化、渲染优化、资源缓存、内存优化
     

    引擎优化

    2.0版本比1.0版本在算法上有所优化,效率更高。2.0版本使用OpenGl ES 2.0图形库,1.0版本使用OpenGL ES 1.0。

    纹理优化

    纹理是最消耗内存的,而且会降低渲染速率。

    二的幂次方

    OpenGL在申请内存存放纹理时,是按2的幂次方申请的,即对应480*320的图片,它申请的是512*512空间。可见,会有相当多的内存被浪费。所以,我们设计的图片,最好是2的幂次方,不然OpenGL最终还是申请2的幂次方内存空间。

    由于不是所有图片都刚好能设计成2的幂次方,因此通过“拼图”方法解决。这就是为啥要使用TexturePacker的原因。如图:

    色深优化

    图片所占内存的大小用这条公式计算:高度像素*宽度像素*色深。如色深RGBA8888,是32个bit,每8bit是一个字节,因此一个像素点占4字节,就是一个整形字符大小。例子。一个480*320的图片大小,占内存480*320*4字节。

    通常,如果对图片的色彩要求不是很高的话。ARGB8888(占4字节)可以改为,ARGB1555(2字节)(透明通道A占1位一般是用做图片混合运算)或者ARGB4444(如果不是做混合运算,用4位比较合适)。或者,如果不需要使用图片透明,就不需要A通道,直接使用RGB888(3字节)改为RGB565(2字节)。这样,图片的最终内存大小就会占用更少的空间。

    纹理压缩格式

    IOS系统使用PowerVR显示芯片,可以直接硬解码PVR格式,该格式可以直接被IOS读取。不过该方式不适合Android等平台。

    PVR格式实际上就是把ARGB8888转成ARGB1555色深进行保存的。

    骨骼动画

    cocos2d-x 2.0.3开始支持骨骼动画,cocos2dBuilder2.1版本也可以进行动画编辑。在处理动画时,对内存优化也是很好的方案。

    纹理尺寸限制

    不同设备支持的纹理尺寸不一样,iphone4支持最大的是4096*4096,iphone4s是4096*2048。有的android设备,仅仅限制在1024*1024。拼图的时候要避免把图片拼的太大。为了提高游戏的兼容性,图片的尺寸最好都设置在1024*1024范围内(主流设备都支持)。

    渲染优化

    批次处理

    使用CCSpriteBatchNode,准备好Sprite的坐标信息后,进行一次性渲染。

    传统渲染处理是这样的:不同的切换纹理,不同地加载和渲染。而批次处理是一次加载完所有纹理,然后一次渲染,这样效率就提高了。

    资源缓存

    CCSpriteFrameCache
    CCTextureCache
    缓存比较耗电量,所以,一般使用完,就会调用remove函数。而且在预加载时要显示进度条,可能会影响用户体验,应该根据情况使用。

    内存优化

     

    资源占用的内存优化

    如前面几个小节所述

    内存池方案

    游戏启动的时候就分配很大的一块区域,游戏运行过程中不释放,直到退出游戏再释放。平时不是为新资源分配内存,而是把资源加载到内存池里面。多次使用的时候,就不用经过多次的释放和重新加载。这部分可以多了解下C++的内存池管理机制。
  • 相关阅读:
    tomcat 无法clean 的bug
    Open Type vs Open resource
    Cannot change version of project facet Dynamic Web Module to 2.4.
    股权稀释
    Java的各种打包方式
    记忆
    【转】给女儿的信
    买房费用
    工作职场
    装修-水电改造
  • 原文地址:https://www.cnblogs.com/rexzhao/p/4387247.html
Copyright © 2011-2022 走看看