`

[转]再谈cacheAsBitmap

阅读更多
http://uh.9ria.com/space-12147-do-blog-view-me-page-9.html

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

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

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

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

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

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

相关推荐

    flex对图片打开,剪切,放大缩小,旋转

    大图片可能会导致性能下降,因此在处理大量或大尺寸图片时,可以考虑使用`BitmapData`对象进行预处理,或者使用`cacheAsBitmap`属性来提高渲染效率。 8. **实现过程**: 在实际项目中,我们可能需要创建自定义...

    圆环旋转动画,flash 脚本源码.rar

    合理使用缓存(`cacheAsBitmap`属性)可以帮助提升动画流畅度,特别是对于复杂图形或大量对象的场景。 总的来说,“圆环旋转动画,flash 脚本源码.rar”是一个很好的学习素材,它涵盖了ActionScript的基本用法和...

    flash优化技巧

    - **性能提升与限制**:启用`cacheAsBitmap`可以极大提升显示速度和降低CPU占用,特别是在复杂动画场景中。然而,其效果也受制于Flash Author Tool的设置,默认值通常设为20,超过这个阈值后,性能提升将变得不明显...

    flash image处理类库

    为了提高性能,可以使用`cacheAsBitmap`属性将显示对象缓存为位图。这样,即使对象内容发生变化,系统也只会更新位图,而不是重新渲染整个对象。 9. 多线程图像处理: 在Flash Player 11及以上版本,引入了...

    as3翻牌特效

    可以使用位图缓存(cacheAsBitmap)和矢量优化(optimizeForBitmap)来提高渲染效率,尤其是在大量翻牌特效同时运行时。 通过以上步骤,我们便能在AS3中实现一个基本的翻牌特效。然而,翻牌特效还有许多可自定义和...

    模仿 3D 图片轮番效果

    我们可以使用位图缓存(`cacheAsBitmap`)和批处理渲染(`drawToBitmap`)来提高性能,减少不必要的重绘。 8. **GytCoverFlow**: 文件名"**GytCoverFlow**"很可能是指一个特定的AS3库或代码示例,用于创建3D图片...

    flash3dtunnel_flash源码_

    6. **性能优化**:由于Flash的3D渲染相对消耗资源,源码可能包含一些优化策略,如减少不必要的重绘、使用位图缓存或者使用DisplayObject的`cacheAsBitmap`属性来提高性能。 学习并理解这个源码,不仅可以帮助我们...

    一个as3曲线图代码

    - 使用`cacheAsBitmap`属性:当图形绘制完成后,可以设置`cacheAsBitmap = true`,将图形转换为位图,提高渲染效率。 - 垂直和水平网格线:为了帮助用户更好地理解数据,可以添加辅助网格线。 9. **颜色和样式**...

    thumbnailsgrid_flash源码_

    7. **优化技巧**: 为了提高性能,开发者可能会采用缓存AsBitmap或CacheAsBitmap属性,将复杂对象转换为位图,减少重绘开销。同时,可能有预加载策略来优化图片加载速度。 8. **用户体验**: 代码可能包含了反馈机制...

    as3.0 开发的钟表型动画Loading源码

    我们应尽量减少不必要的计算,使用缓存机制(如`cacheAsBitmap`),并在适当的时候解除事件监听以释放资源。 6. **代码结构与模块化**:良好的代码组织能提高可读性和维护性。可以将钟表的各个部分(如指针、刻度盘...

    AS3.0地图制作,很好的资源

    例如,使用Sprite Batch或DisplayObjectContainer的cacheAsBitmap属性可以提高渲染效率。 10. **用户界面**:创建地图的同时,还需要设计交互式的UI,如缩放按钮、指南针、比例尺等,这需要用到AS3.0的UI组件和布局...

    flash as3.0代码优化

    - 对于 `TextField`,使用 `cacheAsBitmap` 并设置 `opaqueBackground` 参数,可以在提高性能的同时保持文本清晰度。 通过以上详细的分析和总结,我们可以看到,AS3.0代码优化涉及多方面的考量,包括内存管理、CPU...

    as3 flash 天气预报

    7. 性能优化:避免不必要的重绘,使用位图缓存(cacheAsBitmap)提升图形渲染效率。同时,合理管理内存,及时释放不再使用的对象,防止内存泄漏。 8. 测试与调试:使用Flash的内置调试工具或外部IDE(如Flash ...

    flash比较完整的一个绘图板源码.rar

    `cacheAsBitmap`属性可以将显示对象转换为位图,减少后续渲染的计算量。 7. **交互式用户体验**:除了基本的绘图功能,此源码可能还包含橡皮擦、撤销/重做、保存和加载草图等功能,以提升用户体验。 8. **优化与...

    flash像素级精确选择实现

    BitmapData对象的cacheAsBitmap属性可以做到这一点,它会将矢量图形渲染为位图,后续的像素操作会更快。 2. **局部检测**:只在目标对象的边界附近进行像素检测,而不是在整个舞台。这样可以减少不必要的计算。 3....

    Flex图片预览功能的实现

    6. **性能优化**:为了提高性能,可以使用延迟加载策略,即只有当前显示和即将显示的图片才加载到内存中,其他图片在需要时再加载。 四、Flex编程技巧 1. **使用BitmapData**:对于大型图片,可以先加载为...

    动态的Flash图片放大效果.rar

    7. **优化性能**: 对于大量的图片或复杂动画,开发者可能考虑了性能优化,如使用`cacheAsBitmap`属性来提高渲染速度,或者使用`dispose()`方法释放不再使用的资源。 8. **组件自定义**: Flash中的组件系统允许...

    starling中文API

    10. **Performance优化**:Starling提供了一些性能优化技巧,比如使用RenderState来减少状态切换,使用CacheAsBitmap提高复杂形状的绘制速度。 总之,"Starling中文API"是开发者掌握Starling框架的关键资源,它详细...

    AS3拼图游戏解析

    - 使用位图缓存:对于复杂的拼图块,可以考虑使用cacheAsBitmap属性提高渲染效率。 - 事件冒泡和捕捉:合理使用事件冒泡和捕捉机制,避免不必要的事件处理。 6. **源码分析**: 通过阅读A3GPU06_JigsawPuzzle中...

    [转载] PV3D 全景的一个核心代码

    代码中可能包含了一些优化技巧,如使用`DisplayObject.cacheAsBitmap`属性来提高渲染效率,或者使用适当的缓存策略来减少不必要的计算。 6. **帧率控制**: 为了保证流畅的用户体验,PV3D应用通常需要维持稳定的...

Global site tag (gtag.js) - Google Analytics