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

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. SaltStack任务计划

    编辑fansik_cron.sls文件: 内容如下: cron_test: cron.present: - name: /bin/touch /tmp/fansik.txt - user: root ...

  2. mysql-5.7.16-linux-glibc2.5-x86_64精简后的主从配置

    1.创建复制账号,并授予复制权限CREATE USER 'fansik'@'10.%' IDENTIFIED BY 'fansik';GRANT REPLICATION SLAVE ON *.* TO ...

  3. A除以B (20)

    时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 本题要求计算A/B,其中A是不超过1000位的正整数,B是1位正整 ...

  4. 爬虫基础库之requests模块

    一.requests模块简介 使用requests可以模拟浏览器请求,比起之前用到的urllib,requests模块的api更加快捷,其实ruquests的本质就是封装urllib3这个模块. re ...

  5. Django进阶项目

    本来想上午轻轻松松搞定,没想到还是出了其他的问题,好在最后都解决了 在middleware.py当中 # -*- coding:utf-8 -*- __author__ = 'feimao' impo ...

  6. RabbitMQ队列/Redis缓存

    一.RabbitMQ队列 RabbitMQ安装(Centos7安装):1.安装依赖:yum install socat (不安装会报错)2.下载rpm包:wget http://www.rabbitm ...

  7. focus + select

    focus使光标定位到目标节点之后 select选中光标所在位置的全部内容

  8. OpenGL学习进程(4)第二课:绘制图形

    本节是OpenGL学习的第二个课时,下面介绍如何用点和线来绘制图形:     (1)用点的坐标来绘制矩形: #include <GL/glut.h> void display(void) ...

  9. c++ 关键字extern(声明)和定义的区别

    extern  : extern  int  i; // declares but does not define i int i;         //declares and defines i ...

  10. Python内置标准模块

    time 模块 1 >>> import time 2 >>> time.time() 3 1491064723.808669 4 >>> # t ...