cocos2d-html5 中的性能优化

游戏开发中,难免会遇到性能瓶颈。图片一多,渲染批次就会直线上升,任何动画都会变得闪动。

OpenGL ES优化的问题,主要考虑两个方面:内存存储运行速度

2D游戏中的最占内存的就是图片资源,一张图片使用的纹理格式不同,就可能带来极大的性能差异。图片数量的控制好坏,对一个游戏的流程与否有最直接的关系。在前端开发中,常见的减少HTTP请求的方式有css Sprite 来处理图片数量的问题,在cocos2d中也有类似的处理方式。(这里打个广告,操哥的grunt-sprite).

关于内存,cocos2d中采用预加载的方式来处理。把所有同类图片打包成plist文件,然后通过帧缓存的方式读取。打包软件推荐 TexturePacker.这里注意打包后的的图片空隙不要太多,Size constraints设置为Any size,改变layout Algorithm找到最合适图片。如下图:

publish后会得到plist文件和png文件。其中plist文件记录了打包前的图片的名字和在生成png文件中的位置。在项目的入口文件中引入刚才的plist文件,就可以在任何Layer和Sprite里面提取这些预加载过的图片了。举个栗子:

cc.MenuItemImage.createWithFrames("setA.png", "setB.png",null,this.click_set, this);  cc.Sprite.createWithSpriteFrameName(‘deskBg.png‘); 

关于运行速度,纹理渲染每一次都会调用GLDrawArray,要是上千图片,结果不难想象。要降低渲染批次,我们使用SpriteBatchNode的方式。

SpriteBatchNode的作用管理Sprite。我们知道,每当屏幕渲染一个纹理的时候,需要三个过程:准备渲染、渲染图形、清除渲染。如果每一次都重复这三个过程,这些固定开销就会降低我们的渲染效率。SpriteBatchNode的作用就是把很多次这样的过程变成一次。

例如最近的一次项目。需要把旋转指针、旋转云图、内环背景等添加到一个Layer中。这是可以考虑先给Layer创建SpriteBatchNode,然后把上面的物体放到刚创建的SpriteBatchNode中。

this.spriteBatch = cc.SpriteBatchNode.create("res/pan.png"); this.pan.addChild(this.spriteBatch ,200);  // 转盘 内环 var ring = cc.Sprite.createWithSpriteFrameName(Pan_Arr.l1.ring); this.spriteBatch.addChild(ring); 

使用了后,对应的渲染批次就会降低N-1次。N是SpriteBatchNode管理的Sprite的数量。

关于SpriteBatchNode有两点注意:

  • 使用贴图必须是同一张图片,例如可以使用TexturePacker打包publish出来的图片。
  • 所有被管理的Sprite必须在同一渲染层。也就是说呗AddChild的时候的zOrder必须是一样的。

以上就是最近研究的cocos2d-html5性能优化实践,主要就是FrameCache和SpriteBatchNode两种预加载。

时间: 2024-11-12 13:15:50

cocos2d-html5 中的性能优化的相关文章

使用ThinkPHP开发中MySQL性能优化的最佳21条经验

使用ThinkPHP开发中MySQL性能优化的最佳21条经验讲解,目前,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我 们程序员需要去关注的事情.当我们去设计数据库表结构,对操作数据库时(尤其是查表时的SQL语句),我们都需要注意数据操作的性能.这里,我们不会讲过 多的SQL语句的优化,而只是针对MySQL这一Web应用最多的数据库.希望下面的这些优化技巧对你有用. 1. 为查询缓存优化你的查询大多数的MySQ

HTML5 网络拓扑图性能优化

HTML5 中的 Canvas 对文本的渲染(fillText,strokeText)性能都不太好,比如设置字体(font).文本旋转(rotation),如果绘制较多的文本时,一些交互操作会手动很大的影响,操作起来没那么顺畅,体验将会极其差,这不是我们想要的结果,再进一步和图片的绘制进行比较比较,你会发现,绘制图片和绘制文本在性能上不是一个等级的,在性能上绘制图片会好太多. 我们今天就来谈谈 HT for Web 性能相关的问题.在 HT 中,有很多地方可以设置文本,每个节点上面都可以设置两个

那些Android中的性能优化

性能优化是一个大的范畴,如果有人问你在Android中如何做性能优化的,也许都不知道从哪开始说起. 首先要明白的是,为什么我们的App需要优化,最显而易见的时刻:用户say,什么狗屎,刷这么久都没反应,取关卸载算了. 这跟什么有关,我们先苍白的反驳下,尼玛用户设备老旧网又烂,关我屁事,根本不用优化.可是,老板拍板了,施压给CTO,然后CTO又来找你:Y的今天必须给我想办法优化了,不然不准回家. 好吧,为什么从UI的表象上看,App又卡又慢而且还错乱.我们试着来剖析下吧. 题外话:把minSDK改

android app 开发过程中 对于性能优化的总结

一款手机应用  从开发过程中就要做好 性能优化,这样才能 让用户体验度 提升, 假如 我们打开一个应用 出现卡顿, 不流畅,则会很影响 用户对该应用的态度,产品狗 都很注意这些人机交互方面的 体验. 谷歌官方也是一直在优化 android 系统,不论是  碎片化处理 还是 系能 上面,这方面 ios 就做的比较好,配置比 android 低,但是流畅度却比android高,体验效果更好. 官方推荐方案:http://www.oschina.net/news/60157/android-perfo

chromium中的性能优化工具syzyProf

函数性能分析工具SyzyProf 我先开始介绍SyzyProf.这个工具可以捕获每个线程调用每个函数执行的时间,然后把结果生成一个KCacheGrind能够识别的数据格式文件,然后通过KCacheGrind的展示结果.你就可以知道函数哪个函数执行了次数最多,消耗的时间最多,哪个线程在读写文件,哪个线程在创建窗口界面,而且KCacheGrind以图形的方式显示出函数调用链等信息,非常直观.如图这是我生成CEF自带demo程序的函数调用信息. 其实能够函数性能分析工具已经够多了,比如xperf,AQ

性能调优 -- Java编程中的性能优化

String作为我们使用最频繁的一种对象类型,其性能问题是最容易被忽略的.作为Java中重要的数据类型,是内存中占据空间比较大的一个对象.如何高效地使用字符串,可以帮助我们提升系统的整体性能. 现在,我们就从String对象的实现.特性以及实际使用中的优化这几方面来入手,深入理解以下String的性能优化. 在这之前,首先看一个问题.通过三种方式创建三个对象,然后依次两两匹配,得出的结果是什么?答案留到最后揭晓. 1 String str1 = "abc"; 2 String str2

React中的性能优化

1. 作用域的修改放在constructor中 constructor (props) { super(props) // 当组件的state或者props发生改变的的时候,render函数就是重新执行 this.state = { inputValue: '', list: [] } // 将this指向放在constructor中执行,在复杂的组件开发中节约性能 this.handleInputChange = this.handleInputChange.bind(this) this.h

深入浅出数据仓库中SQL性能优化之Hive篇

转自:http://www.csdn.net/article/2015-01-13/2823530 一个Hive查询生成多个Map Reduce Job,一个Map Reduce Job又有Map,Reduce,Spill,Shuffle,Sort等多个阶段,所以针对Hive查询的优化可以大致分为针对MR中单个步骤的优化(其中又会有细分),针对MR全局的优化,和针对整个查询(多MR Job)的优化,下文会分别阐述. 在开始之前,先把MR的流程图帖出来(摘自Hadoop权威指南),方便后面对照.另

从C#垃圾回收(GC)机制中挖掘性能优化方案

GC,Garbage Collect,中文意思就是垃圾回收,指的是系统中的内存的分配和回收管理.其对系统性能的影响是不可小觑的.今天就来说一下关于GC优化的东西,这里并不着重说概念和理论,主要说一些实用的东西.关于概念和理论这里只做简单说明,具体的大家可以看微软官方文档. 一.什么是GC                                                                                              GC如其名,就是垃圾收集