转 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++的内存池管理机制。

时间: 2024-10-12 14:55:19

转 cocos2d-x 优化(纹理渲染优化、资源缓存、内存优化)的相关文章

转 cocos2dx内存优化 (之二)

一.cocos2dx之如何优化内存使用(高级篇) 本文由qinning199原创,转载请注明:http://www.cocos2dx.net/?p=93 一.内存优化原则 为了优化应用内存,你应该知道是什么消耗了你应用的大部分内存,答案就是Texture(纹理)!它几乎占据了90%的应用内存.那么我们应该尽力去减小我们应用的纹理内存使用,否则我们的应用进程可能会被系统杀死. 为了减少内存警告,这里我们给出两个普遍的关于cocos2dx游戏内存优化的指导原则. 1)了解瓶颈,然后解决掉 什么样的纹

性能分析工具Profiler——05内存优化

学习笔记适合新手,如有错误请指正.?号处也请各位指点下,谢谢. 内存优化一般来说主要从以下两方面入手:降低资源大小,及时释放不用资源 降低资源大小 要降低资源大小,首先需要分析哪些资源占用较大的比重 1在Build后,打开Console界面,点击界面右上交的下拉菜单 2Open Editor Log打开Editor日志,其中有在整个包中按大小排序的资源列表,它显示了资源的大小以及在安装宝中所占的比例 一般来说,一个3D游戏项目中贴图及UI资源图至少占用50%以上容量,其次就是模型资源.音频资源等

SQLServer 2014 内存优化表

内存优化表是 SQLServer 2014 的新功能,它是可以将表放在内存中,这会明显提升DML性能.关于内存优化表,更多可参考两位大侠的文章:SQL Server 2014新特性探秘(1)-内存数据库 试试SQLSERVER2014的内存优化表 创建内存优化表也很简单,以下测试: 添加内存优化数据库文件组:[sql] view plain copy 在CODE上查看代码片派生到我的代码片USE [master] GO -- 在当前数据库中添加内存优化数据库文件组(每个数据库仅1个文件组) AL

初识内存优化表

创建数据库 创建内存优化数据文件组 注意:每个数据库只能创建一个内存优化数据文件组. 创建内存优化数据文件 在文件组MemoryOptimizedData中添加一个文件夹MemoryOptimizedDataFile用来保存内存优化表数据 创建内存优化表 内存优化表分为两种类型: 持久表(默认):把数据保存在内存和内存优化数据文件组中. 非持久表:数据仅保存在内存中,一旦系统因为故障导致重启数据将会丢失. 因为SSMS目前不支持可视化创建,So只能手动创建内存优化表: 1 USE MyDB; 2

SQL Server 2014 内存优化表

不同于disk-based table,内存优化表驻留在内存中,使用 Hekaton 内存数据库引擎实现.在查询时,从内存中读取数据行:在更新时,将数据的更新直接写入到内存中.内存优化表能够在disk上维护一个副本,用于持久化数据集. Memory-optimized tables reside in memory. Rows in the table are read from and written to memory. The entire table resides in memory.

iOS项目内存优化

在用非ARC模式编写iOS程序的时候,造成程序内存泄露在所难免,后期我们一般会进行内存优化.自己比较常用的内存优化方法有两种 1.Analyze,静态分析内存泄露的方法.很简单,在Xcode菜单栏中点击 ”Product“ -> "Analyze",编译完成后项目工程中可能造成内存泄露的代码就会被标记出来,这样我们就可以有针对性的更改代码优化内存了. 2.使用Xcode的自带工具Leaks,动态的检测内存泄露.一般步骤如下. 1>在Xcode菜单栏中点击 ”Product“

Kafka 协议实现中的内存优化

Kafka 协议实现中的内存优化 Kafka 协议实现中的内存优化 Jusfr 原创,转载请注明来自博客园 Request 与 Response 的响应格式 Request 与 Response 都是以 长度+内容 形式描述, 见于 A Guide To The Kafka Protocol Request 除了 Size+ApiKey+ApiVersion+CorrelationId+ClientId 这些固定字段, 额外的 RequestMessage 包含了具体请求数据: Request

Sql server2014 内存优化表 本地编译存储过程

参考文献:http://www.infoq.com/cn/news/2013/09/Compiled-Queries http://www.bianceng.cn/database/SQLServer/201502/48247.htm SQL Server 2014内存数据库针对传统的表和存储过程引入了新的结构: memory optimized table(内存优化表)和native stored procedure(本地编译存储过程). 内存优化表:  默认情况下Memory optimiz

ios内存优化

转自:http://blog.csdn.net/b719426297/article/details/20790461 在用非ARC模式编写iOS程序的时候,造成程序内存泄露在所难免,后期我们一般会进行内存优化.自己比较常用的内存优化方法有两种 1.Analyze,静态分析内存泄露的方法.很简单,在Xcode菜单栏中点击 ”Product“ -> "Analyze",编译完成后项目工程中可能造成内存泄露的代码就会被标记出来,这样我们就可以有针对性的更改代码优化内存了. 2.使用X