- 浏览: 84996 次
- 性别:
- 来自: 北京
最新评论
-
A5121612886:
好文要顶!
Flash Builder 编译器选项 -
谁在哀伤望月:
非常好,谢谢分享
Flash builder4 插件终极破解方法
Flash Player
会以SWF内容的帧频速度来刷新需要变化的内容,而这个刷新的过程,我们通常称为“重绘(redraw)”,相信即便是初级的菜鸟也知道,只要使用的是
Debug版本的Flash Player, 右键菜单里就会有“Show Redraw Regions (显示重绘区域)”
这个选项,当此选项打开的时候,我们就能清楚地看到此刻场景内被重绘的区域。
那么什么情况下会发生重绘呢??
1、最常见的是情况就是舞台上的可视组件在形状、位置、状态(alpha, scale...)发生改变的时候会触发Flash Player 的重绘。
2、当一个DisplayObject的层级(ChildIndex)发生改变的时候也会导致重绘。
3、当你将一个Sprite / MovieClip 的buttonMode 设置为 true
的时候,即便是单帧动画,重绘会在MouseEvent.MOUSE_DOWN的时候触发。又或者你对DisplayObject设置层级的时候,即便
DisplayObject的层级没有发生改变,也会使得 Flash Player对此显示对象进行重绘。
既然重绘是为了能够将显示内容进行更新,那么一个Flash应用程序就不可避免的要触发重绘。而重绘却是性能消耗的主要根源,一个有经验的
Flash开发人员写出的Flash应用,其性能可能70% -
90%(甚至更高)是消耗在重绘上,那么提高Flash应用程序的运行效率和减少重绘有着莫大的关系。
要减少重绘,首先我们需要对单位每帧重绘大小这个概念进行量化:重绘的大小应该取决于数量和面积。数量取决(但不是完全取决)于可视范围内的需要更新的显
示对象的数量,假设场景上有两个闪烁的小圆点并且宽和高都为20,那么重绘的数量为3,而重绘的总面积就为: 20 * 20 * 3 = 1200
(平方像素)。
简单的看看上面的公式是不是觉得重绘面积的计算很容易呢?那么继续估计下下面这个情况的重绘面积是多少:
如果你计算的结果是: 20 * 20 * 6 = 2400 (平方像素),那么恭喜你,答错了...
根据上面的介绍,重绘的大小理应就是重绘的数量 * 单个区域的面积,可是为什么说这个情况就错呢?让我们看看问题究竟出在什么地方:
让人觉得奇怪的地方出现了,重绘区域的数量依旧是3,而面积却增大了不少,按照图上给出的坐标信息,我们不难算出,总重绘面积的大小为:
20 * (70 - 20 + 20) * 3 = 4200 (平方像素),比起预先估算的 2400 (平方像素)整整大了 75%
或许从这个地方开始,大家就开始觉得困惑了。的确,Flash Player的重绘面积并没有按照我们之前的设想那样来计算,但是依旧能找到一些规律,仔细来看以下几种况:
如果你够细心,应该不难看出每次 Flash Player 重绘的区域不会超过3个,即便舞台上有多于三个的显示对象需要被重绘,Flash
Player
会将其中的两个或者多个集合(根据位置来判断)在一起,然后重绘在一个大区域里面,至此,我们暂时可以将上面两个重绘法则命名为三区域法则和就近合并法
则,通过总结出来的这两个法则,我们就能更加容易地理解Flash Player
重绘的机制,以及解释在日常调试中遇到的一些重绘现象了。比如QQ牧场里几个靠得比较近得小动物被放在一个区域里面重绘,而有些动物则不然,被单独重绘。
当我们了解了重绘机制后,那么接下来就应该进一步去了解如何避免多余的重绘,下面列举的方法可能大部分都是被大家所熟悉的。
1、当一个带有动画效果的DisplayObject在不显示的时候,不仅仅是将其 visible 属性设置为 false, 因为重绘依旧会进行,这里你可以选择暂停掉动画,又或者利用removeChild(displayObject) 直接将此对象移除出显示列表。
2、不出现在可视范围内外观变化的显示对象其实是不会发生重绘的,这点相信是Flash本身做了优化,也就是说我的
Stage.stageWidth 和 Stage.stageHeight 都为200的情况下,一个处在舞台上的变化的显示物体,坐标为(200,
200) 宽高都为10,此时Flash Player重绘内容并不会包括此对象,新版本的Flash Player
甚至在浏览器窗口最小化的时候会关闭掉所有的重绘,这个时候你往往会发现CPU占用率骤降,但是应用程序依旧在运行。
3、在设置DisplayObject的层级的时候请先做一个判断:
if (myContainer.getChildIndex(myChild) != 0){ myContainer.setChildIndex(myChild, 0); }
运气好的话,这个判断最高能带来200%以上的效率提升。
4、当你的Sprite / MovieClip 设置 cacheAsBitmap = true 这个属性的时候,当此显示对象内很小的一个区域(甚至是被遮盖着的物体)发生变化,会导致整个Sprite / MovieClip重绘。
5、尽量确保活动的显示内容在非可见区域被暂停活动或者干脆直接移除出显示列表,这里提到的不可视区域不仅仅是舞台外不可见的,还包括舞台内被其他物体遮盖住的显示对象。
正如之前提到的,重绘是Flash Player性能消耗的主要大户,所以去优化减小重绘区域面积,减少不必要的重绘操作次数,往往能够带来比较大的性能优化回报。
发表评论
-
全面提升你的程序效率 之细说 bitmapdata AS3 Bitmap 抠图(透明部分)和碰撞(点击)检测
2012-06-05 09:54 7176如果你是刚接触as编程 ... -
关于优化
2012-05-21 14:58 9761. Avoid the new operator whe ... -
AS3动态获得类名及类的方法
2012-05-08 13:50 28141.获得某个实例对象的类名:getQualifiedClass ... -
Flash Builder 编译器选项
2012-05-02 10:30 6388-benchmark 输出性 ... -
【AS3】为什么AS3.0事件流机制会有捕获阶段、目标阶段、冒泡阶段三个阶段
2012-04-26 10:03 3823原问题:事件机制有三个步骤,捕获,目标和冒泡。请问,在目标阶段 ... -
[AS3]事件流那点事儿
2012-04-26 09:36 1235在群里有人问了个问 ... -
Socket+AMF3粘包问题
2012-04-17 10:05 1804问题: 服务端Mina 前台接收Flex 参照的 ... -
AS3事件中target和currentTarget的区别
2012-04-12 15:40 1926在事件处理过程中,会 ... -
ActionScript垃圾回收
2012-04-12 15:04 1401在《给AS程序员的一点建议一文 》中我提到了释放资源的重 ... -
updateAfterEvent的作用
2012-04-10 17:26 1230flash中一共有三个类具 ... -
[AS3]registerClassAlias的用法
2012-03-20 10:35 1082registerClassAlias在利用AMF3进行序列话网 ... -
navigateToURL
2012-03-09 15:51 1161navigateToURL整理总结一些关于navigate ... -
再谈cacheAsBitmap
2012-03-09 12:00 650cacheAsBitmap这个属性很多人都知道,但少有人明白它 ... -
flash中cacheAsBitmap的使用
2012-03-09 11:59 814缓存显示对象 如果 Flash 中的设计尺寸增大,无论创建 ... -
Debug和Release之本质区别
2012-02-27 11:41 1171关于Debug和Release之本质区别 使用条件编译来完成区 ... -
AS3中super的用法[转自A闪]
2012-02-13 10:19 1224super它到底是什么?这是我第一个问题,在帮助中石这样说明的 ... -
AS3.0的Dictionary类
2012-02-10 11:00 816AS3中的Dictionary类(flash. ... -
AS3中public internal private protected的区别
2012-02-10 10:43 2532protected Java與AS3中的 ... -
面试题目
2011-08-17 16:31 8741.as2与as3.的最主要区别 ... -
AS3事件类型
2011-05-18 09:54 1490Event事件类型: ACTIVATE 激活事件 ...
相关推荐
flash鼠绘教程 学习flash非常好用的教程
flash鼠绘教程2 掌握flash鼠绘很好用的教程,自己收集整理的
flash鼠绘教程1 flash的初级教程,自己收集整理的
整理的flash鼠绘基础教程,pdf格式,很清晰,虽然分多,是我一课一课的下载再转换的哦!
flash动画鼠绘精品教程教大家一步一步的学会鼠绘
flash鼠绘教程 学习flash非常好用的教程
flash画图flash画图flash画图flash画图flash画图
Flash鼠绘教程七例 相信是你想要的! 2分很值地!
超强的Flash鼠绘作品:知了动画,知了扇翅膀动画,一个氏量的Flash知了,相当的逼真了。
在flash中运用工具箱常用工具绘一卡通人物教学设计。
Flash鼠绘着色入门教程.pdf
深入剖析Nand Flash工作原理,详尽介绍了Nand Flash的工作原理/时序/使用等。
Flash鼠绘着色入门教程借鉴.pdf
Flash鼠绘着色入门教程参考.pdf
flash flash.js js 下载 文件flash flash.js js 下载 文件flash flash.js js 下载 文件flash flash.js js 下载 文件flash flash.js js 下载 文件flash flash.js js 下载 文件flash flash.js js 下载 文件flash flash...
数据结构算数数据结构算法理解flash据结构算法理解flash法理解flash
flash绘画资源1 很好! 以后陆续发布!
经典flash经典flash经典flash经典flash经典flash经典flash经典flash经典flash经典flash经典flash经典flash经典flash经典flash经典flash经典flash经典flash经典flash经典flash经典flash经典flash经典flash经典flash...
贺卡flash贺卡flash贺卡flash贺卡flash贺卡flash贺卡flash贺卡flash贺卡flash贺卡flash贺卡
flash特效flash特效flash特效flash特效flash特效flash特效flash特效