如何提高你的移动开发中AS3/AIR性能
Shawn Blais 让我了解到如何在移动平台上对AS3代码进行优化。他的博客(http://esdot.ca/site/category/blog)只有十来篇文章,但都是些很意思的信息,尤其适合我。这篇文章介绍的是关于图形方面的优化。
下面三个步骤可以提高程序的性能,其实都围绕一个理论:一切皆bitmap。 或许你可以使用MovieClips 或者 Sprite序列动画,甚至可以继续保持使用Flash的渲染列表来保持代码简单整洁。但真正的图片数据是? Bitmap!一切皆bitmap。
步骤一: 使用GPU渲染
当你创建一个移动程序的时候,你会找到一个包含所有基本程序设定的文件,叫"application.xml"(或者类似的名字)。其中有一段代码会告诉移动设备使用CPU还是GPU渲染。大多默认(如FlashDevelop模版程序)会启用CPU渲染,这可能比较合适于矢量图渲染。但使用bitmap并启动GPU渲染将会使性能大大提高!
打开application.xml并设置:
- <initialWindow> <renderMode>gpu</renderMode> </initialWindow>
复制代码
步骤二:降低舞台渲染质量
AS3舞台渲染质量相对决定了你能渲染的图片多少。不过重点是,即使你设置了舞台渲染质量为低,bitmap的平滑(smoothing)属性仍然有效并且在表现上没多大区别。如此一来我们就没必要浪费CPU在这个地方了。
- stage.quality = LOW;
复制代码
如果你的图片正在加载并想在运行中切换渲染模式(见步骤三),AS3可以允许你运行中改变,像这样:
- stage.quality = HIGH;
- convertMySprite(); // 处理函数
- stage.quality = LOW;
复制代码
步骤三: 使用Bitmaps,并缓存它们
这可能是最好的优化方式,我的移动程序都应用上了这种方法。不过只有使用GPU渲染才能达到最佳效果。基本理念就是把全部的bitmap data 缓存到Dictionary里面供之后引用。在GPU渲染模式下,这些纹理数据保存在GPU存储器中。只要是从Dictionary获取的图片资源都是引用唯一的一份bitmapData,不用耗费新的内存并且创建新的图片速度非常快!
这种方式特别适合频繁使用的图片,如--提示,小怪,子弹和地图块等。不过我是全部都用上了。
如果你还想了解更多的细节,Shawn的研究报告有源码和详细的解析。他的代码帮你做了很多自动化的底层,并又由很多人去完善了代码。我自己也做了细微的调整,现在只要一个类我就可以使用任何我想要的图片资源。导入.PNG文件? 包含Sprite或MovieClip的.SWC?自己定制配置文件? 都不需要!!全自动底层实现~,轻快,使用简单。而且最酷的是:代码非常简短,而且简单易懂。
说的有点多了,下面是我现在用的类的链接(http://www.andymoore.ca/code/CachedSprite.as)。完全免费使用,最好让我知道你导入了我这个类
。复制粘帖到工程上面就可以马上应用它了。
额外步骤:转换MovieCilps
我还没试过这一步骤,不过这算是步骤三里的拓展吧。一个工具类(http://esdot.ca/site/2012/fast-rendering-in-air-cached-spritesheets)把MovieClip里面的每一帧都转化为bitmap data缓存(存储到GPU)。如果我最近手头上的游戏有需要动画的话,我将都会用上这个。
缺点:
我发现使用GPU渲染的最大弊端就是你会失去一些实时的filters和blendmodes的表现力。比如你想要一个漂亮的火焰发光效果的时候,预置效果当然很容易。但是如果你想动态添加一些效果--如添加一些风力效果和文字,那是很难达到满意的效果(使用设备字体,基于spritesheet的渲染)。如果你也有类似的难题可以来与我商讨,我会找到解决方案的(但不一定都能解决)。
其次就是深层嵌套的渲染列表会比平时更降低你App的性能。尽量避免过深的渲染嵌套。不过我觉得你已经这样做了
。
GPU渲染在非移动平台上并不一定运行结果一样(不包括Stage3D的官方例子)。这意味着当你在电脑中测试运行你的移动app的时候你仍然可以看到filters和blendmodes的效果(在手机上不一定有)。这会导致一些混乱,特别是一个复杂的app程序在桌面上运行的时候。
优点:
使用我的方法即时是很复杂的游戏场景在用了2年的Nexus手机上依然可以跑的很流畅。我还在iPad上做了1个多小时的性能测试-不断地绘制新的动画(并且不移除它们)。测试最后降到了3FPS并且内存增长正常,app程序也没崩溃。
最关键的是,在手机设备上这样的性能提升比用blitting要好的多。这意味着基于这3个步骤下来你将获得比Flixel 和FlashPunk 默认渲染引擎更好的性能。
在大多情况下,在移动设备上由于使用GPU,可能要比电脑上运行起来性能更好。 希望Stage3D会做一些改良,那到时候blitting引擎(如 Flixel和 FlashPunk)可能会比较适合桌面和浏览器平台。
更多图表,数据和测试报告,详情请查看Shawn的帖子,他认为移动性能提升能达到4000%。
博客内容来源:http://bbs.9ria.com/thread-174891-1-1.html
原文链接:http://www.andymoore.ca/2012/01/how-to-improve-your-mobile-as3air-performance/
如何提高你的移动开发中AS3/AIR性能的更多相关文章
- 关于Net开发中一些SQLServer性能优化的建议
一. ExecuteNonQuery和ExecuteScalar 对数据的更新不需要返回结果集,建议使用ExecuteNonQuery.由于不返回结果集可省掉网络数据传输.它仅仅返回受影响的行数.如果 ...
- Android 开发中三种多线程
在开发工程中线程可以帮助我们提高运行速度,Android开发中我知道的线程有四个一个是老生长谈的Thread,第二个是asyncTask,第三个:TimetTask,第四个是Looper,四个多线程各 ...
- ios怎样实现快速将显卡中数据读出压缩成视频在cocos2dx扩展开发中
如果解决ios怎样实现快速将显卡中数据读出压缩成视频在cocos2dx扩展开发中 手机平台性能是个关键问题. 压缩视频分成3个步骤: 读取显卡数据, 使用编码器压缩,保存文件. 使用libav 压缩的 ...
- 【初码干货】使用阿里云对Web开发中的资源文件进行CDN加速的深入研究和实践
提示:阅读本文需提前了解的相关知识 1.阿里云(https://www.aliyun.com) 2.阿里云CDN(https://www.aliyun.com/product/cdn) 3.阿里云OS ...
- 分享20款移动开发中很有用的 jQuery 插件
今天,很显然每个网站都需要有一个移动优化的界面以提高移动用户的使用体验.在开发任何移动项目时,要尽可能保持每一种资源尺寸都尽可能的小,以给最终用户提供一个好的体验是非常重要的.在这篇文章中我们已经编制 ...
- iOS 开发中的争议(一)
序言 打算分享一些有争议的话题,并且表达一下我的看法.这是该系列的第一篇,我想讨论的是:类的成员变量应该如何定义? 在 Objective-C 的语言的早期,类的私有成员变量是只能定义在 .h 的头文 ...
- 【Cocos2d-x游戏开发】细数Cocos2d-x开发中那些常用的C++11知识
自从Cocos2d-x3.0开始,Cocos2dx就正式的使用了C++11标准.C++11简洁方便的特性使程序的可拓展性和可维护性大大提高,也提高了代码的书写速度. 下面我们就来一起学习一下Cocos ...
- PHP开发中的缓存技术汇总
在PHP开发中,出于对网站服务器负载的考虑,往往需要对页面.数据等内容进行缓存处理,下面就来看看,在PHP开发中有哪些缓存方式吧. 1.页面部分缓存该种方式,是将一个页面中不经常变的部分进行静态缓存, ...
- android-webview开发中的各种使用方法(持续更,尽量全)
最新坑A:(没看过的可以从下面开始处看起): 测试部门测出来一个坑,当多次点击退出后,会出现app崩溃现象,报如下错误: java.lang.IllegalArgumentException: Rec ...
随机推荐
- Java8——Lambda表达式
/* * 一.Lambda 表达式的基础语法:Java8中引入了一个新的操作符 "->" 该操作符称为箭头操作符或 Lambda 操作符 * 箭头操作符将 Lambda 表达 ...
- echars vue 封装全局组件 曲线 柱状图 同v-chars绿色系 配置样式
Echars vue封装 ,曲线图 <!DOCTYPE html> <html lang="en"> <head> <meta chars ...
- Linux ssh 密钥创建与验证
1.需要两个虚拟机,每一个创建一个用户登录到用户根下 2.每个用户都要创建密钥对 3.把两个用户的公用密钥用ssh-copy-id -i 命令将公用的密钥复制到另一个用户中 4.在客户端开 ...
- 第03组 Beta版本演示
队名:不等式方程组 组长博客 组员 340 张逸杰 组长 304 苏凯婷 312 鲍冰如 320 陈荣杰 331 杨锦镔 335 王嵚 336 林家伟 341 黄彬煌 342 黄智锋 343 吴智勇 ...
- Linux性能优化实战学习笔记:第二十八讲
一.案例环境描述 1.环境准备 2CPU,4GB内存 预先安装docker sysstat工具 apt install docker.io sysstat nake git 案例总共由三个容器组成: ...
- [LeetCode] 119. Pascal's Triangle II 杨辉三角之二
Given a non-negative index k where k ≤ 33, return the kth index row of the Pascal's triangle. Note t ...
- matlab实现主成分分析(遥感图像处理)
数据说明:采用的数据源是从别人那里拷的2012年全年的Sea Surface Temperature(海标温度,SST)数据,一直想找一份比较好的主成分分析数据,也没找到. Matlab自身有主成分分 ...
- LeetCode 220. Contains Duplicate III (分桶法)
Given an array of integers, find out whether there are two distinct indices i and j in the array suc ...
- SpringCloud项目中使用Nacos作为注册中心
SpringCloud和Nacos的介绍原理在这里就不多说了,百度一大堆,这里就只是记录一下刚开始学习时候项目的使用过程 Nacos-server 我这里是从官网下载的Nacos-server 下载地 ...
- 【07月15日】A股滚动市盈率PE最低排名
仅根据最新的市盈率计算公式进行排名,无法对未来的业绩做出预测. 方大集团(SZ000055) - 滚动市盈率PE:2.53 - 滚动市净率PB:1.13 - 滚动年化股息收益率:4.01% - 建筑 ...