(转)flash位图缓存cacheAsBitmap

矢量图,是靠 cpu运算出来的。而位图记录的颜色信息都保存在了内存中。把矢量图缓存成位图,以减轻cpu的运算压力。

cacheAsBitmap 属性   

cacheAsBitmap:Boolean  [读写]

语言版本:  ActionScript 3.0
运行时版本:  AIR 1.0, Flash Player 9



如果设置为 true,则 Flash Player 将缓存显示对象的内部位图表示形式。此缓存可以提高包含复杂矢量内容的显示对象的性能。

具有已缓存位图的显示对象的所有矢量数据都将被绘制到位图而不是主显示。 然后,将位图作为贴紧到最接近像素边界的未拉伸、未旋转的像素复制到主显示。 像素按一对一与父对象进行映射。 如果位图的边界发生更改,则将重新创建位图而不会拉伸它。

除非将 cacheAsBitmap 属性设置为 true,否则不会创建内部位图。

将 cacheAsBitmap 属性设置为 true 后,呈现并不更改,但是,显示对象将自动执行像素贴紧。 动画速度可能会大大加快,具体取决于矢量内容的复杂性。

只要对显示对象(当其 filter 数组不为空时)应用滤镜,cacheAsBitmap 属性就自动设置为 true,而且如果对显示对象应用了滤镜,即使将该属性设置为 false,也会将该显示对象的 cacheAsBitmap 报告为 true。 如果清除显示对象的所有滤镜,则 cacheAsBitmap 设置将更改为它上次的设置。

在下面的情况下,即使将 cacheAsBitmap 属性设置为 true,显示对象也不使用位图,而是从矢量数据呈现:

位图过大:在任一方向上大于 2880 像素。
位图无法分配(内存不足错误)。
最好将 cacheAsBitmap 属性与主要具有静态内容且不频繁缩放和旋转的影片剪辑一起使用。 对于这样的影片剪辑,在转换影片剪辑时(更改其 x 和 y 位置时),cacheAsBitmap 可以提高性能。

=================================================================================

例程说明:

/**
     * 为包含复杂的矢量图形(例如文本或渐变)的动画对象打开位图缓存可提高性能。但是,如果在显示对象(如播放其时间轴的
    影片剪辑)中启用了位图缓存,您将获得相反的效果。在各个帧上, Flash Player 必须更新缓存的位图,然后在屏幕上重绘该
    位图,这一过程要求许多 CPU 周期。仅当缓存的位图可以一次生成,且随后无需更新即可使用时,才适合使用位图缓存功能。
          为 Sprite 对象打开位图缓存后,移动该对象不会使 Flash Player 重新生成缓存的位图。更改对象的 x 和 y 属性不会导致重新生
    成。然而,任何试图旋转、缩放对象或更改其 alpha 值的行为都将导致 Flash Player 重新生成缓存的位图,从而降低性能。
    注: AIR 或 Packager for iPhone Preview 中提供的 DisplayObject.cacheAsBitmapMatrix 属性没有此限制。通过使用
    cacheAsBitmapMatrix 属性,可以在不重新生成任何位图的情况下旋转或缩放对象。此属性可确保使用 GPU 在屏幕上呈现位
    图,从而提供性能改进。
        缓存位图占用的内存大于常规影片剪辑实例。例如,如果舞台上的影片剪辑为 250 x 250 像素,缓存它可能会使用 250 KB 内
    存,而未缓存它只需 1 KB。
     * 1.对于只改变x,y时 没有缓存fps=12左右;慢慢增高应该是因为有些mc跑到stage外面了
     * 2.对于只改变x,y时 有缓存fps=30左右
     * 3.对于只改变scaleX,sacleY时 无缓存fps=10,慢慢降低
       4.对于只改变scaleX,sacleY时 有缓存fps=3左右
     */

例子:

cacheasbitmap的实例影响.rar

原文地址:https://www.cnblogs.com/wonderKK/p/2888895.html