|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
“fla”是Flash的原始档,只能用对应版本或更高版本的Flash打开编辑。
poluoluo中心提醒:深切了解FlashPlayer重绘
FlashPlayer会以SWF内容的帧频速率来革新必要变更的内容,而这个革新的历程,我们一般称为“重绘(redraw)”,信任即使是低级的菜鸟也晓得,只需利用的是Debug版本的FlashPlayer,右键菜单里就会有“ShowRedrawRegions(显现重绘地区)”这个选项,当此选项翻开的时分,我们就可以分明地看到现在场景内被重绘的地区。
那末甚么情形下会产生重绘呢?
1、最多见的是情形就是舞台上的可视组件在外形、地位、形态(alpha,scale...)产生改动的时分会触发FlashPlayer的重绘。
2、当一个DisplayObject的层级(ChildIndex)产生改动的时分也会招致重绘。
3、当你将一个Sprite/MovieClip的buttonMode设置为true的时分,即使是单帧动画,重绘会在MouseEvent.MOUSE_DOWN的时分触发。又大概你对DisplayObject设置层级的时分,即使DisplayObject的层级没有产生改动,也会使得FlashPlayer对此显现工具举行重绘。
既然重绘是为了可以将显现内容举行更新,那末一个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%!
也许从这个中央入手下手,人人就入手下手以为狐疑了。切实其实,FlashPlayer的重绘面积并没有依照我们之前的假想那样来盘算,可是仍旧能找到一些纪律,细心来看以下几种况:
假如你够仔细,应当不丢脸出每次FlashPlayer重绘的地区不会凌驾3个,即使舞台上有多于三个的显现工具必要被重绘,FlashPlayer会将个中的两个大概多个汇合(依据地位来判别)在一同,然后重绘在一个年夜地区内里,至此,我们临时能够将下面两个重绘法例定名为三地区法例和就近兼并法例,经由过程总结出来的这两个法例,我们就可以加倍简单地舆解FlashPlayer重绘的机制,和注释在一样平常调试中碰到的一些重绘征象了。好比QQ牧场里几个靠得对照近得小植物被放在一个地区内里重绘,而有些植物则否则,被独自重绘。
当我们懂得了重绘机制后,那末接上去就应当进一步往懂得怎样制止过剩的重绘,上面枚举的办法大概年夜部分都是被人人所熟习的。
1、当一个带有动画效果的DisplayObject在不显现的时分,不单单是将其visible属性设置为false,由于重绘仍旧会举行,这里你能够选择停息失落动画,又大概使用removeChild(displayObject)间接将此工具移除出显现列表。
2、不呈现在可视局限表里不雅变更的显现工具实际上是不会产生重绘的,这点信任是Flash自己做了优化,也就是说我的Stage.stageWidth和Stage.stageHeight都为200的情形下,一个处在舞台上的变更的显现物体,坐标为(200,200)宽高都为10,此时FlashPlayer重绘内容其实不会包含此工具,新版本的FlashPlayer乃至在扫瞄器窗口最小化的时分会封闭失落一切的重绘,这个时分你常常会发明CPU占用率骤降,可是使用程序仍旧在运转。
3、在设置DisplayObject的层级的时分请先做一个判别:- if(myContainer.getChildIndex(myChild)!=0){myContainer.setChildIndex(myChild,0);}
复制代码 命运好的话,这个判别最高能带来200%以上的效力提拔。
4、当你的Sprite/MovieClip设置cacheAsBitmap=true这个属性的时分,当此显现工具内很小的一个地区(乃至是被粉饰着的物体)产生变更,会招致全部Sprite/MovieClip重绘。
5、只管确保举动的显现内容在非可见地区被停息举动大概爽性间接移除出显现列表,这里提到的不成视地区不单单是舞台外不成见的,还包含舞台内被其他物体粉饰住的显现工具。
正如之条件到的,重绘是FlashPlayer功能损耗的次要年夜户,以是往优化减小重绘地区面积,削减不用要的重绘操纵次数,常常可以带来对照年夜的功能优化报答。
本地或全局转换应用于任何对象。但非真正意义上的3D,层的位置关系其显示问题。 |
|