AS3.0中的显示编程(三)-- 缓存显示对象
2010-10-10 07:24:20 来源:WEB开发网随着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
更多精彩
赞助商链接