AS3.0中的显示编程(三)-- 缓存显示对象
2010-10-10 07:24:20 来源:WEB开发网 闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁炬儳缍婇弻鐔兼⒒鐎靛壊妲紒鐐劤缂嶅﹪寮婚悢鍏尖拻閻庨潧澹婂Σ顔剧磼閻愵剙鍔ょ紓宥咃躬瀵鎮㈤崗灏栨嫽闁诲酣娼ф竟濠偽i鍓х<闁诡垎鍐f寖闂佺娅曢幑鍥灳閺冨牆绀冩い蹇庣娴滈箖鏌ㄥ┑鍡欏嚬缂併劎绮妵鍕箳鐎n亞浠鹃梺闈涙搐鐎氫即鐛崶顒夋晬婵絾瀵ч幑鍥蓟閻斿摜鐟归柛顭戝枛椤牆顪冮妶搴′簼缂侇喗鎸搁悾鐑藉础閻愬秵妫冮崺鈧い鎺戝瀹撲礁鈹戦悩鎻掝伀缁惧彞绮欓弻娑氫沪閹规劕顥濋梺閫炲苯澧伴柟铏崌閿濈偛鈹戠€n€晠鏌嶆潪鎷屽厡闁汇倕鎳愮槐鎾存媴閸撴彃鍓卞銈嗗灦閻熲晛鐣烽妷褉鍋撻敐搴℃灍闁绘挻娲橀妵鍕箛闂堟稐绨肩紓浣藉煐濮樸劎妲愰幘璇茬闁冲搫鍊婚ˇ鏉库攽椤旂》宸ユい顓炲槻閻g兘骞掗幋鏃€鐎婚梺瑙勬儗閸樺€熲叺婵犵數濮烽弫鍛婃叏椤撱垹纾婚柟鍓х帛閳锋垶銇勯幒鍡椾壕缂備礁顦遍弫濠氱嵁閸℃稒鍊烽柛婵嗗椤旀劕鈹戦悜鍥╃У闁告挻鐟︽穱濠囨嚃閳哄啰锛滈梺褰掑亰閸欏骸鈻撳⿰鍫熺厸閻忕偟纭堕崑鎾诲箛娴e憡鍊梺纭呭亹鐞涖儵鍩€椤掑啫鐨洪柡浣圭墪閳规垿鎮欓弶鎴犱桓闂佸湱枪閹芥粎鍒掗弮鍫熷仺缂佸顕抽敃鍌涚厱闁哄洢鍔岄悘鐘绘煕閹般劌浜惧┑锛勫亼閸婃牠宕濋敃鈧…鍧楀焵椤掍胶绠剧€光偓婵犱線鍋楀┑顔硷龚濞咃絿妲愰幒鎳崇喓鎷犻懠鑸垫毐闂傚倷鑳舵灙婵炲鍏樺顐ゆ嫚瀹割喖娈ㄦ繝鐢靛У绾板秹寮查幓鎺濈唵閻犺櫣灏ㄥ銉р偓瑙勬尭濡繂顫忛搹鍦<婵☆垰鎼~宥囩磽娴i鍔嶉柟绋垮暱閻g兘骞嬮敃鈧粻濠氭偣閸パ冪骇鐎规挸绉撮—鍐Χ閸℃ê闉嶇紓浣割儐閸ㄥ墎绮嬪澶嬪€锋い鎺嶇瀵灝鈹戦埥鍡楃仯闁告鍕洸濡わ絽鍟崐鍨叏濡厧浜鹃悗姘炬嫹

随着Flash包含内容元素的增多,整个程序会变得越来越庞大。这时候,对Flash性能的优化,将会是必须要考虑的一个内容。下面,我为大家讲解下在AS3.0里,如何应用缓存技术缓存显示对象,从而获得性能上的提升。
首先,我们先了解下,Flash的刷新机制是怎样的。Flash是一个逐帧演示的动画,在显示列表中的对象,Flash本身是不知道哪些需要刷新,哪些不需要刷新的。因此,每一帧,Flash都会把整个内容都刷新一次。也正是因为这个原因,当舞台上(包括舞台外看不见的区域),如果包含大量大面积、复杂的图形时,Flash的运行速度会明显下降。为了解决这个问题,Flash对显示对象引入了“位图缓存”的概念。
那么,什么是位图缓存呢?他的优化原理是怎么样的?我们可以这么想,Flash的舞台是一个很大的容器,里面有许许多多的元件。其中呢,有一些元件是不断变化的,而另外一些元件是静止的。可是Flash区分不出来哪些是不断变化的,哪些是静止的,他只好全部都刷新一遍。那么位图缓存,其实就是告诉 Flash说,这一些元件是静止的,你别去刷新啦!
可是,是不是所有静止的元件,都需要缓存呢。那也不是的。因为Flash缓存的代价非常大,一个显示对象,标识了缓存后,占用内存的大小比标识前,可能要大上几百倍。而如果只是简单的小元件,缓存和不缓存,性能上也没什么大的区别,就真的没必要耗费那么大的内存了,性价比低嘛。所以,要缓存的,也仅仅只是那些比较复杂,又相对静止的显示对象。
上面提到了“静止”的概念,什么样的情况算静止呢?当然,一动不动自然是静止了。但是呢,如果只是简单的平移,或者说缩小缓存对象,那虽然是变化的,但对性能是没什么影响的,因此也可以作为缓存的目标。但如果对象经常运动,比如旋转或者放大显示对象,那么因为产生变化,Flash不得不去刷新,启用缓存对性能没有优化,反而大量的占据内存,就得不偿失了。
如果你把上面的内容都看懂,明白位图缓存的原理,那么,你应该很清楚的知道,什么情况下应该启用位图缓存,什么情况下不应该启用。Flash的帮助文档上,是明确的列出了“四要四不要”,但我认为看那个东西没什么意义,真实的情况远比那个要复杂的多,只有明白原理,才能做出最佳的判断。当然,还有一个笨办法,那就是两种方式都用一下,然后比较下占用内存的情况、占用CPU的情况,和实际的运行速度。从理论上来说,这个方法才是最有说服力的,就是麻烦了些。
最后,说下三个相关的属性:
cacheAsBitmap:该属性决定显示对象是否开启位图缓存,默认是False。
opaqueBackground:设置一个不透明的背景颜色(一般和舞台背景色相同)。假如我们把一个比较复杂的矢量背景开启位图缓存。那么,仅仅只是这块区域位图化,这块区域没有包含到的地方(就是那些空白的地方),是不会位图化的,每一帧还是会刷新。所以,为了优化性能,需要把这些地方也人为的设置一个颜色,做成一个完整的位图。
scrollRect:设置显示对象的滚动矩形范围。当更改scrollRect对象的x和y属性时,显示对象会在矩形内滚动(就是上面说的平移)。
出处http://windtoto.blog.51cto.com/1986737/402615
- ››asp.net页面弄成伪静态页面
- ››Asp.net 中将汉字转换成拼音的方法
- ››ASP.NET及JS中的cookie基本用法
- ››ASP.NET获取MS SQL Server安装实例
- ››asp.net实现调用百度pai 在线翻译英文转中文
- ››ASP.NET页面选项进行提示判断
- ››Asp.net定时执行程序
- ››ASP.NET中利用DataList实现图片无缝滚动
- ››ASP.NET验证控件RequiredFieldValidator
- ››ASP.NET中使用System.Net.Mail发邮件
- ››ASP.NET中获取用户控件中控件的ID
- ››ASP.NET中FileBytes写成文件并存档
更多精彩
赞助商链接