博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
再谈cacheAsBitmap
阅读量:6939 次
发布时间:2019-06-27

本文共 1114 字,大约阅读时间需要 3 分钟。

cacheAsBitmap这个属性很多人都知道,但少有人明白它到底是如何生效的。虽然看名字是转换为位图处理,但用起来的时候感觉却也不过如此。所以,不少人最终选择自己转换Bitmap。
当然,自己转Bitmap也是可以的,也只是多浪费点内存和处理速度,然后麻烦点罢了。但事实上,很多时候cacheAsBitmap已经足够使用了。

先得说说FLASH的屏幕更新机制。在Debug播放器内,可以勾选显示重复区域来以红框显示更新区域。也就是说,FLASH并不会每帧都渲染所有的区域。这点上的确如此。但是在红框内呢?比如我有一张很复杂的静态矢量图在背景上,然后上面显示了一个很简单的动画(甚至是一个透明的不断重刷的矩形),以通常的想法,FLASH应该缓存背景的图像,仅仅是重新更新上面的图形,但事实上并不会这样。FLASH才不管你哪些动哪些不动,只要是红框内的图形,它一定都会重新刷新一次,如果不解决这个问题,根本没法做“全屏”的东西,因为哪怕你空刷一个占满屏幕的Bitmap都会导致所有的矢量图全部更新。

事实上,cacheAsBitmap就是用来解决这个问题的。你可以理解成它能够影响FLASH的渲染机制。只要一个显示对象被设为cacheAsBitmap,除了他自己之外,外部将无法令其重新刷新,而是像我们想象的那样简单的叠加。当然,副作用是,被设置为cacheAsBitmap的图形,内部只要变了一点,哪怕是很小的区域,也会导致整个对象更新,但是,也只有这种情况才会更新。

除此之外,还有以下的影响:
它相当于被设置为layer混合,混合关系会出现问题(诸如Alpha混合)。
由于实现方式是缓存位图,会遇到整数坐标问题。所以,平移和缩放都会一顿一顿的,此外影响到的还有设备文本。好在设备文本也可以设置为cacheAsBitmap,这样就和外部容器一起“顿”,就看不出来了游戏:。
此外,我发现这种做法还会影响到Draw的区域。这点我还没认真测试过。

cacheAsBitmap是有效的。我们觉得它没有效果,可能是因为把这个设置放在了动画上(动画是一直动的),或者设置在了运动的物品外部(内部物品运动外部不动的话,可能还比原来更慢)。其实我们大可以自己尝试,一般来说,只要别出现显示上的问题,在非容器对象设置cacheAsBitmap都会有一定的性能提升。而且它并不像自己实现的Bitmap,缓存位图并没有消耗多余的性能,而且也不可能出现内存泄漏。

最好不要把它当作缓存位图,而是当成一种改变FLASH渲染机制的手段。cacheAsBitmap具有两面性,错误的设置也可能会更慢。当然,它是个运行期间属性,有心的话,也可以动态修改。

转载地址:http://khinl.baihongyu.com/

你可能感兴趣的文章
201521460001网络攻防实验
查看>>
使用Apache pdfbox: 从Linux安装字体到log4j设置日志级别
查看>>
结构体
查看>>
iOS9新框架—Watch Connectivity(详情:http://ios.itcast.cn/subject/ios9/index.shtml )
查看>>
1、线性表实现:顺序存储
查看>>
linux下重命名文件的命令
查看>>
flex-手机端主页布局实例---构造页面结构
查看>>
win10下的linux一些问题
查看>>
BZOJ 1131: [POI2008]Sta
查看>>
PHP文件上传实例详解!!!
查看>>
mysql 查寻数据文件存放路径
查看>>
activemq的安装与使用
查看>>
SpringMVC系列(九)自定义视图、重定向、转发
查看>>
PAT 1029 Median
查看>>
分析内存java
查看>>
20050610:幸运奖你个头
查看>>
win下硬盘装ubuntu 算非用到wubi
查看>>
php memcache保存session的一个设置误区
查看>>
简单工厂模式
查看>>
nginx(一)
查看>>