Cocos2d-JS 性能优化

来源:互联网 发布:jqueryeach遍历数组 编辑:程序博客网 时间:2024/05/17 22:05
缓存的创建和清除
为了提供性能,Cocos2d-JS提供了几个缓存,分别应用与不同的情况。这些 缓存类有纹理缓存,精灵帧缓存,动画 缓存和着色器缓存。
场景与资源
不同的场景中资源的占用不同,而资源的占用决定了缓存创建和清除的时机。
 场景与资源
不同的场景中资源的占用不同,而资源的占用决定了缓存创建和清除的时机。
缓存创建和清除时机
使用纹理和精灵帧缓存时,一个原则是:“尽可能将所有资源加载到缓存”。
事实上作为游戏开发人员,需要照顾那些配置比较低的设备。用户不可能采用“尽可能将所有资源加载到缓存”一刀切的方式。但是可采用将缓存分为短周期和长周期的方式。
1.短周期缓存中内容一方面玩家花费的时间短,另一方面不跨场景,没有必要长时间缓存。
可以在该场景进入函数onEnter()中创建缓存。在该场景退出函数onExit()中清除。
注意:一定要慎重使用在onExit()函数中的removeSpriteFrames()函数,removeSpriteFrames()会清除素有缓存里的帧。
2.长周期缓存
长周期缓存中内容一方面玩家花费时间长,另一方面可能跨场景。为了获得流畅的用户体验,不能经常反复创建和清除缓存。而是长时间缓存。长周期缓存可以分为两种情况:贯穿整个游戏的长周期缓存和关卡长周期缓存。
贯穿整个游戏长周期缓存
贯穿整个游戏长周期缓存是在游戏刚刚启动时,给用户展示Loading等信息时创建的缓存。
关卡长周期缓存
关卡长周期缓存是开始某个特定关卡等场景时场景的缓存。
清除的时候与贯穿整个游戏长周期缓存类似。一般不需要考虑清楚缓存的问题。
图片与纹理优化
背景图片的优化
1.不要Alpha通道
2.拼图
3.加载到纹理缓存的时机
4.考虑使用瓦片地图
JSB内存管理
 JavaScript语言有自己的内存管理机制,它是自动内存回收的。而在Cocos2d-JS中的JSB是通过Cocos2d-x在本地平台运行的。那么JSB的内存管理就离不开Cocos2d-x内存管理约束。
因此,使用Cocos2d-js引擎开发游戏的时候,如果游戏运行于Web平台,他的内存管理是采用JavaScirpt固有的内存管理机制。如果游戏运行与JSB本地平台。那么引擎提供的特有对象,采用Cocos2d-x引用计数内存管理方式。
使用Bake层
Cocos2d-JS引擎开发的游戏运行于Web平台的时候,如果采用Canvas模式渲染场景中不怎么变动的内容,则会消耗大量的渲染时间。Canvas模式渲染过程是调用drawImage绘制场景中的对象。即便静止不动也会逐一进行绘制。但是同样的渲染内容,对于OpenGL和WebGL渲染就不会有太大性能开销。
针对Cocos2d-JS中的Web平台Canvas渲染模式,可以使用Bake层,Bake层可以将本身以及其子节点都备份到Canvas上。只要自身或其子节点不做修改,下次绘制时,将直接把Canvas上的内容一次渲染出去。这样,原来需要多次的渲染过程,现在只需要一次就可以完成了。
注意:如果是经常变化的节点对象,采用Bake层渲染不仅不会提高性能,反而会影响性能。
使用对象池
对象池类cc.pool、放入到池中的对象需要实现unuse和reuse函数。unuse函数是对象被放入池中时调用。reuse函数是从池中获得重用对象时使用的。
在使用对象池cc.pool时需要往对象池中添加对象。
cc.pool.putInPool(object)
当调用putInPool()函数添加对象时,cc.pool底层将调用object.unuse()函数进行初始化处理。
为了从对象池中查找对象可以通过如下语句实现:
var object =cc.pool.getFromPool(“MySprite”,args);
getFromPool()函数中的MySprite是类名,args是参数。通过这个类名和args参数可以获得可重用对象。如果返回值为空,则说明没有找到合适的可重用对象,在对象被返回之前,cc.pool底层将调用reuse函数。并用参数args来初始化该对象。
在使用getFromPool()函数查找对象之前,最好使用如下函数判断一下池中是否存在可重用对象:
var exist=cc.pool.hasObject(“MySprite”);
从池中删除一个对象可以使用如下代码:
cc.pool.removeObj(object);
清空整个池可以使用如下代码:
cc.pool.drainAllPeople();
Web平台需要搭建Web服务器,Web服务器的主要功能是提供网上信息浏览服务。
1.Apache
Apache HTTP Server仍然是世界上用的最多的Web服务器,市场占有率达60%左右。它的成功之处主要在于它的源代码开发支持跨平台的应用。可以运行在几乎所有的UNIX、Windows、Linux系统平台上
2.Tomcat
Tomcat是一个开放源代码。运行Servlet和JSPWeb应用软件的基于Java的Web应用软件容器。
3.IIs
Microsoft的Web服务器产品为Internet Information Services(IIS),IIS是允许在公共Intranet或Internet上发布信息的Web服务器,IIS是目前最流行的Web服务器产品之一。 
4.WebSphere
WepSphere Application Server是一种功能完美、开放的Web应用程序服务器,是IBM电子商务计划的核心部分。他是基于Java的应用环境,用于建立、部署、和管理Internet和Internet Web应用程序
5.WebLogic
Oracle WebLogic Server是一种多功能、基于标准的Web应用给服务器,为企业构建自己的应用提供了坚实的基础。Oracle WebLogic Server在使应用服务器成为企业应用架构的基础方面继续处于领先地位。
1 0
原创粉丝点击