再谈cacheAsBitmap
cacheAsBitmap这个属性很多人都知道,但少有人明白它到底是如何生效的。虽然看名字是转换为位图处理,但用起来的时候感觉却也不过如此。所以,不少人最终选择自己转换Bitmap。
当然,自己转Bitmap也是可以的,也只是多浪费点内存和处理速度,然后麻烦点罢了。但事实上,很多时候cacheAsBitmap已经足够使用了。
先得说说FLASH的屏幕更新机制。在Debug播放器内,可以勾选显示重复区域来以红框显示更新区域。也就是说,FLASH并不会每帧都渲染所有的区域。这点上的确如此。但是在红框内呢?比如我有一张很复杂的静态矢量图在背景上,然后上面显示了一个很简单的动画(甚至是一个透明的不断重刷的矩形),以通常的想法,FLASH应该缓存背景的图像,仅仅是重新更新上面的图形,但事实上并不会这样。FLASH才不管你哪些动哪些不动,只要是红框内的图形,它一定都会重新刷新一次,如果不解决这个问题,根本没法做“全屏”的东西,因为哪怕你空刷一个占满屏幕的Bitmap都会导致所有的矢量图全部更新。
事实上,cacheAsBitmap就是用来解决这个问题的。你可以理解成它能够影响FLASH的渲染机制。只要一个显示对象被设为cacheAsBitmap,除了他自己之外,外部将无法令其重新刷新,而是像我们想象的那样简单的叠加。当然,副作用是,被设置为cacheAsBitmap的图形,内部只要变了一点,哪怕是很小的区域,也会导致整个对象更新,但是,也只有这种情况才会更新。
除此之外,还有以下的影响:
它相当于被设置为layer混合,混合关系会出现问题(诸如Alpha混合)。
由于实现方式是缓存位图,会遇到整数坐标问题。所以,平移和缩放都会一顿一顿的,此外影响到的还有设备文本。好在设备文本也可以设置为cacheAsBitmap,这样就和外部容器一起“顿”,就看不出来了游戏:http://www.shengshiyouxi.com。
此外,我发现这种做法还会影响到Draw的区域。这点我还没认真测试过。
cacheAsBitmap是有效的。我们觉得它没有效果,可能是因为把这个设置放在了动画上(动画是一直动的),或者设置在了运动的物品外部(内部物品运动外部不动的话,可能还比原来更慢)。其实我们大可以自己尝试,一般来说,只要别出现显示上的问题,在非容器对象设置cacheAsBitmap都会有一定的性能提升。而且它并不像自己实现的Bitmap,缓存位图并没有消耗多余的性能,而且也不可能出现内存泄漏。
最好不要把它当作缓存位图,而是当成一种改变FLASH渲染机制的手段。cacheAsBitmap具有两面性,错误的设置也可能会更慢。当然,它是个运行期间属性,有心的话,也可以动态修改。
再谈cacheAsBitmap的更多相关文章
- [转载]再谈百度:KPI、无人机,以及一个必须给父母看的案例
[转载]再谈百度:KPI.无人机,以及一个必须给父母看的案例 发表于 2016-03-15 | 0 Comments | 阅读次数 33 原文: 再谈百度:KPI.无人机,以及一个必须 ...
- Support Vector Machine (3) : 再谈泛化误差(Generalization Error)
目录 Support Vector Machine (1) : 简单SVM原理 Support Vector Machine (2) : Sequential Minimal Optimization ...
- Unity教程之再谈Unity中的优化技术
这是从 Unity教程之再谈Unity中的优化技术 这篇文章里提取出来的一部分,这篇文章让我学到了挺多可能我应该知道却还没知道的知识,写的挺好的 优化几何体 这一步主要是为了针对性能瓶颈中的”顶点 ...
- 浅谈HTTP中Get与Post的区别/HTTP协议与HTML表单(再谈GET与POST的区别)
HTTP协议与HTML表单(再谈GET与POST的区别) GET方式在request-line中传送数据:POST方式在request-line及request-body中均可以传送数据. http: ...
- Another Look at Events(再谈Events)
转载:http://www.qtcn.org/bbs/simple/?t31383.html Another Look at Events(再谈Events) 最近在学习Qt事件处理的时候发现一篇很不 ...
- C++ Primer 学习笔记_32_STL实践与分析(6) --再谈string类型(下)
STL实践与分析 --再谈string类型(下) 四.string类型的查找操作 string类型提供了6种查找函数,每种函数以不同形式的find命名.这些操作所有返回string::size_typ ...
- 再谈JSON -json定义及数据类型
再谈json 近期在项目中使用到了highcharts ,highstock做了一些统计分析.使用jQuery ajax那就不得不使用json, 可是在使用过程中也出现了非常多的疑惑,比方说,什么情况 ...
- C++ Primer 学习笔记_44_STL实践与分析(18)--再谈迭代器【下】
STL实践与分析 --再谈迭代器[下] 三.反向迭代器[续:习题] //P355 习题11.19 int main() { vector<int> iVec; for (vector< ...
- C++ Primer 学习笔记_43_STL实践与分析(17)--再谈迭代器【中】
STL实践与分析 --再谈迭代器[中] 二.iostream迭代[续] 3.ostream_iterator对象和ostream_iterator对象的使用 能够使用ostream_iterator对 ...
随机推荐
- 用户控件(.ascx)与<ul><li>以及<a>布局之小结
用户控件(.ascx)与<ul><li>以及<a>布局 小结 一.用户控件(.ascx) 1.aspx是浏览器直接访问的页面,而ascx是用户控件,一般是用来重用. ...
- Java操作属性文件,支持新增或更新多个属性
Java操作属性文件.支持新增或更新多个属性 一.更新或新增单个属性的方法 /** * 写入properties信息 * @param filePath 绝对路径(包含文件名称和后缀名) * @par ...
- ORACLE SEQUENCE 介绍
在oracle中sequence就是所谓的序列号,每次取的时候它会自己主动添加,一般用在须要按序列号排序的地方. 1.Create Sequence 你首先要有CREATE SEQUENCE或者C ...
- MongoDB[mark]总忘记它们是干啥的
MongoDB集群包括一定数量的mongod(分片存储数据).mongos(路由处理).config server(配置节点).clients(客户端).arbiter(仲裁节点:为了选举某个分片存储 ...
- DEV GridControl 获取选中行的数据
private void gridView1_FocusedRowChanged(object sender, DevExpress.XtraGrid.Views.Base.FocusedRowCha ...
- Oracle序列简单应用
/* --指定cache的值 如果指定CACHE值 oracle就可以预先在内存里面放置一些sequence 这样存取会快些 cache里面 的取完 oracle自动再取一 组到 cache 使用ca ...
- 在App中混合HTML5开发App如何实现的。在App中使用HTML5的优缺点是什么?
参考答案: 在iOS中,通常是通常UIWebView来实现,当然在iOS8以后可以使用WKWebView来实现.有以下几种实现方法: 通过实现UIWebView的代理方法来拦截,判断scheme是否是 ...
- Selenium webdriver 截图 太长截不全的问题
Selenium webdriver 截图 太长截不全的问题 1.环境 selenium webdriver.net 2.46.0.0 + firefox 37.0.1 + win 8.1 2.问题 ...
- hdu Intelligent IME
算法:字典树 题意:手机9键拼音:2:abc 3:def 4:ghi 5:jkl 6:mno 7:pqrs 8:tuv 9:wxyz: 第一行读入一个T,代表测试组数: 之后输入两个整数n和m, 有 ...
- hdu5358 First One(尺取法)
转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud First One Time Limit: 4000/2000 MS (Java/ ...