cacheAsBitmap这个属性很多人都知道,但少有人明白它到底是如何生效的。虽然看名字是转换为位图处理,但用起来的时候感觉却也不过如此。所以,不少人最终选择自己转换Bitmap。
当然,自己转Bitmap也是可以的,也只是多浪费点内存和处理速度,然后麻烦点罢了。但事实上,很多时候cacheAsBitmap已经足够使用了。
先得说说FLASH的屏幕更新机制。在Debug播放器内,可以勾选显示重复区域来以红框显示更新区域。也就是说,FLASH并不会每帧都渲染所有的区域。这点上的确如此。但是在红框内呢?比如我有一张很复杂的静态矢量图在背景上,然后上面显示了一个很简单的动画(甚至是一个透明的不断重刷的矩形),以通常的想法,FLASH应该缓存背景的图像,仅仅是重新更新上面的图形,但事实上并不会这样。FLASH才不管你哪些动哪些不动,只要是红框内的图形,它一定都会重新刷新一次,如果不解决这个问题,根本没法做“全屏”的东西,因为哪怕你空刷一个占满屏幕的Bitmap都会导致所有的矢量图全部更新。
事实上,cacheAsBitmap就是用来解决这个问题的。你可以理解成它能够影响FLASH的渲染机制。只要一个显示对象被设为cacheAsBitmap,除了他自己之外,外部将无法令其重新刷新,而是像我们想象的那样简单的叠加。当然,副作用是,被设置为cacheAsBitmap的图形,内部只要变了一点,哪怕是很小的区域,也会导致整个对象更新,但是,也只有这种情况才会更新。
除此之外,还有以下的影响:
它相当于被设置为layer混合,混合关系会出现问题(诸如Alpha混合)。
由于实现方式是缓存位图,会遇到整数坐标问题。所以,平移和缩放都会一顿一顿的,此外影响到的还有设备文本。好在设备文本也可以设置为cacheAsBitmap,这样就和外部容器一起“顿”,就看不出来了。
此外,我发现这种做法还会影响到Draw的区域。这点我还没认真测试过。
cacheAsBitmap是有效的。我们觉得它没有效果,可能是因为把这个设置放在了动画上(动画是一直动的),或者设置在了运动的物品外部(内部物品运动外部不动的话,可能还比原来更慢)。其实我们大可以自己尝试,一般来说,只要别出现显示上的问题,在非容器对象设置cacheAsBitmap都会有一定的性能提升。而且它并不像自己实现的Bitmap,缓存位图并没有消耗多余的性能,而且也不可能出现内存泄漏。
最好不要把它当作缓存位图,而是当成一种改变FLASH渲染机制的手段。cacheAsBitmap具有两面性,错误的设置也可能会更慢。当然,它是个运行期间属性,有心的话,也可以动态修改。
分享到:
相关推荐
- **性能提升与限制**:启用`cacheAsBitmap`可以极大提升显示速度和降低CPU占用,特别是在复杂动画场景中。然而,其效果也受制于Flash Author Tool的设置,默认值通常设为20,超过这个阈值后,性能提升将变得不明显...
- 使用`cacheAsBitmap`属性:当图形绘制完成后,可以设置`cacheAsBitmap = true`,将图形转换为位图,提高渲染效率。 - 垂直和水平网格线:为了帮助用户更好地理解数据,可以添加辅助网格线。 9. **颜色和样式**...
- 对于 `TextField`,使用 `cacheAsBitmap` 并设置 `opaqueBackground` 参数,可以在提高性能的同时保持文本清晰度。 通过以上详细的分析和总结,我们可以看到,AS3.0代码优化涉及多方面的考量,包括内存管理、CPU...
- 图形缓存:对于复杂或频繁改变的图形,可以使用`cacheAsBitmap`属性来提升性能。 - 位图遮罩优化:避免使用大量或复杂的位图遮罩,它们会消耗大量CPU资源。 3. **动画优化**: - 使用frame-based(基于帧)...
6. **性能优化**:为了提高性能,可以使用延迟加载策略,即只有当前显示和即将显示的图片才加载到内存中,其他图片在需要时再加载。 四、Flex编程技巧 1. **使用BitmapData**:对于大型图片,可以先加载为...
7. 性能优化:避免不必要的重绘,使用位图缓存(cacheAsBitmap)提升图形渲染效率。同时,合理管理内存,及时释放不再使用的对象,防止内存泄漏。 8. 测试与调试:使用Flash的内置调试工具或外部IDE(如Flash ...
5. **优化性能**:为了保证动画流畅,需要合理使用缓存策略,如设置文本字段的`cacheAsBitmap`属性,以提高渲染效率。 6. **测试与调试**:在Flash IDE中预览动画效果,确保文字交替顺畅无误。如果遇到问题,可以...
7. **代码优化**:常见的优化策略包括使用位运算代替浮点计算、避免不必要的对象创建、使用共享对象池、以及利用DisplayObject的cacheAsBitmap属性提高渲染效率。 8. **性能分析工具**:除了内置的性能输出窗口,...
7. **渲染优化**:如使用Stage3D进行硬件加速,或者使用DisplayObject的cacheAsBitmap属性。 8. **资源加载策略**:按需加载资源,减少初始加载时间,提升用户体验。 通过阅读这篇博文和提供的源码,开发者可以学习...
`cacheAsBitmap`属性可以将显示对象转换为位图,减少后续渲染的计算量。 7. **交互式用户体验**:除了基本的绘图功能,此源码可能还包含橡皮擦、撤销/重做、保存和加载草图等功能,以提升用户体验。 8. **优化与...
BitmapData对象的cacheAsBitmap属性可以做到这一点,它会将矢量图形渲染为位图,后续的像素操作会更快。 2. **局部检测**:只在目标对象的边界附近进行像素检测,而不是在整个舞台。这样可以减少不必要的计算。 3....
7. **优化技巧**: 为了提高性能,开发者可能会采用缓存AsBitmap或CacheAsBitmap属性,将复杂对象转换为位图,减少重绘开销。同时,可能有预加载策略来优化图片加载速度。 8. **用户体验**: 代码可能包含了反馈机制...
7. **优化性能**: 对于大量的图片或复杂动画,开发者可能考虑了性能优化,如使用`cacheAsBitmap`属性来提高渲染速度,或者使用`dispose()`方法释放不再使用的资源。 8. **组件自定义**: Flash中的组件系统允许...
10. **Performance优化**:Starling提供了一些性能优化技巧,比如使用RenderState来减少状态切换,使用CacheAsBitmap提高复杂形状的绘制速度。 总之,"Starling中文API"是开发者掌握Starling框架的关键资源,它详细...
如果源码使用了DisplayObject的cacheAsBitmap属性,那么在动画运行过程中,只有首次绘制时会消耗计算资源,后续的动画帧只需要简单地重新定位和绘制缓存的位图,从而减少重绘次数。 为了实现7种颜色的线条动画,...
- 使用位图缓存:对于复杂的拼图块,可以考虑使用cacheAsBitmap属性提高渲染效率。 - 事件冒泡和捕捉:合理使用事件冒泡和捕捉机制,避免不必要的事件处理。 6. **源码分析**: 通过阅读A3GPU06_JigsawPuzzle中...
为了提高性能,可以使用`cacheAsBitmap`属性将显示对象缓存为位图。这样,即使对象内容发生变化,系统也只会更新位图,而不是重新渲染整个对象。 9. 多线程图像处理: 在Flash Player 11及以上版本,引入了...
6. **性能优化**:由于Flash的3D渲染相对消耗资源,源码可能包含一些优化策略,如减少不必要的重绘、使用位图缓存或者使用DisplayObject的`cacheAsBitmap`属性来提高性能。 学习并理解这个源码,不仅可以帮助我们...
为了优化性能,可能需要在绘制过程中使用缓存策略,比如使用cacheAsBitmap属性。 6. **事件处理**:在Flash中,事件驱动编程是基础。通过监听鼠标事件,我们可以跟踪用户的绘画动作。例如,当鼠标按下时开始绘画,...
代码中可能包含了一些优化技巧,如使用`DisplayObject.cacheAsBitmap`属性来提高渲染效率,或者使用适当的缓存策略来减少不必要的计算。 6. **帧率控制**: 为了保证流畅的用户体验,PV3D应用通常需要维持稳定的...