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

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两种预加载。

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

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

    使用ThinkPHP开发中MySQL性能优化的最佳21条经验讲解,目前,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的事,而这更 ...

  2. Lazy<T>在Entity Framework中的性能优化实践

    Lazy<T>在Entity Framework中的性能优化实践(附源码) 2013-10-27 18:12 by JustRun, 328 阅读, 4 评论, 收藏, 编辑 在使用EF的 ...

  3. 在 Android开发中,性能优化策略十分重要

    在 Android开发中,性能优化策略十分重要本文主要讲解性能优化中的布局优化,希望你们会喜欢.目录 示意图 1. 影响的性能 布局性能的好坏 主要影响 :Android应用中的页面显示速度 2. 如 ...

  4. 【SQL系列】深入浅出数据仓库中SQL性能优化之Hive篇

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[SQL系列]深入浅出数据仓库中SQL性能优化之 ...

  5. HTML5 网络拓扑图性能优化

    HTML5 中的 Canvas 对文本的渲染(fillText,strokeText)性能都不太好,比如设置字体(font).文本旋转(rotation),如果绘制较多的文本时,一些交互操作会手动很大 ...

  6. 那些Android中的性能优化

    性能优化是一个大的范畴,如果有人问你在Android中如何做性能优化的,也许都不知道从哪开始说起. 首先要明白的是,为什么我们的App需要优化,最显而易见的时刻:用户say,什么狗屎,刷这么久都没反应 ...

  7. Web中的性能优化

    优化Web中的性能 简介 web的优化就是一场阻止http请求最终访问到数据库的战争.优化的方式就是加缓存,在各个节点加缓存. web请求的流程及节点 熟悉流程及节点,才能定位性能的问题.而且优化的顺 ...

  8. chromium中的性能优化工具syzyProf

    函数性能分析工具SyzyProf 我先开始介绍SyzyProf.这个工具可以捕获每个线程调用每个函数执行的时间,然后把结果生成一个KCacheGrind能够识别的数据格式文件,然后通过KCacheGr ...

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

    String作为我们使用最频繁的一种对象类型,其性能问题是最容易被忽略的.作为Java中重要的数据类型,是内存中占据空间比较大的一个对象.如何高效地使用字符串,可以帮助我们提升系统的整体性能. 现在, ...

随机推荐

  1. PowerDesigner数据模型(CDM—PDM)

    操作过程 点击:  Tools/Generate Physical Data Model

  2. 剑指offer 面试23题

    面试23题: 题目:如果一个链表中包含环,如何找出环的入口节点? 解题分析:其实此题可以分解为三个题目:1)如何判断一个链表中是否包含环?2)如何找到环的入口节点?3)如何得到环中节点的数目? 解决此 ...

  3. NodeJS应用程序设置为window service-辅助工具(C#)

    1.修改nssm,去对话框后 2.生成批处理文件,执行 3.将nssm.exe.node.exe放在资源文件里面 附代码 工具

  4. CSS 中z-index全解析(摘自阿里西西)

    z-index全解析 Z-index属性决定了一个HTML元素的层叠级别.元素层叠级别是相对于元素在Z轴上(与X轴Y轴相对照)的位置而言.一个更高的Z-index值意味着这个元素在叠层顺序中会更靠近顶 ...

  5. 教你在Yii2.0框架中如何创建自定义小部件

    本教程将帮助您创建自己的自定义小部件在 yii framework 2.0.部件是可重用的模块和用于视图. 创建一个小部件,需要继承 yii\base\Widget,覆盖重写 yii\base\Wid ...

  6. $Java正则表达式基础整理

    (一)正则表达式及语法简介 String类使用正则表达式的几个方法: 正则表达式支持的合法字符: 特殊字符: 预定义字符: 方括号表达式: 圆括号表达式:用于将多个表达式组成一个子表达式,可以使用或运 ...

  7. flex datagrid 导出csv

    public function exportToCSV(dataGrid:DataGrid):void { var dataProviderCollection:ArrayCollection = d ...

  8. 定制AIX操作系统的shell环境

    操作系统与外部最主要的接口就叫做shell.shell是操作系统最外面的一层.shell管理你与操作系统之间的交互:等待你输入,向操作系统解释你的输入,并且处理各种各样的操作系统的输出结果. shel ...

  9. PreTranslateMessage作用和使用方法

    PreTranslateMessage作用和使用方法  PreTranslateMessage是消息在送给TranslateMessage函数之前被调用的,绝大多数本窗口的消息都要通过这里,比较常用, ...

  10. 深入Struts2的过滤器FilterDispatcher--中文乱码及字符编码过滤器

    引用 前几天在论坛上看到一篇帖子,是关于Struts2.0中文乱码的,楼主采用的是spring的字符编码过滤器(CharacterEncodingFilter)统一编码为GBK,前台提交表单数据到Ac ...