2011-03-14 33 views
0

我已经创建了一个完整的光谱色轮Sprite对象,它由1440个矢量三角形组成,或者如果您愿意的话。动作脚本 - 位图缓存与图像资产性能

因为我想动画色轮,我已经激活了显示对象的cacheAsBitmap属性。然而,将矢量缓存为位图并不会增加动画的性能 - 它仍然很慢,很刺激。

将无损压缩的色轮的PNG屏幕截图导入到库中,将其转换为Sprite,并在动画过程中旋转此新图像资源。

为什么一个未压缩的PNG图像资产导出出来执行相同的矢量图像与cacheAsBitmap属性设置为true?

回答

6

因为每次旋转对象时,都必须重新计算一个新的位图。

cacheAsBitmap仅适用于正在翻译,未旋转的对象;从docs

将cacheAsBitmap属性最好与主要具有 静态内容不扩展 ,经常旋转的影片剪辑使用 。使用这样的电影 剪辑,当电影 剪辑被翻译时(当其x和y的 位置被改​​变时),cacheAsBitmap可导致 的性能增加。

这是因为缓存的位图是直接复制到显示表面(速度 - 这称为blitting)。每次渲染时对位图应用转换对于仅在一段时间内只旋转一次的对象来说都是愚蠢的。仅在应用转换时重新计算位图是一种设计决策,它在最常见的情况下提高了性能,其中翻译以外的转换并不频繁。

+3

@TheDarkIn 1978:不是直接的,但是您可以使用['draw']在代码中拍摄对象一次快照(http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/ display/BitmapData.html#draw())将其写入一个'BitmapData'对象,然后用它创建一个'Bitmap'对象,并使用该位图对象而不是原始的基于矢量的对象。 – Cameron 2011-03-14 01:53:06

+0

感谢您的回答。他们澄清了我的一些误解。 – TheDarkIn1978 2011-03-14 01:56:46

+0

@TheDarkIn 1978:没问题:-)顺便说一下,为什么你删除了你的评论?这是一个很好的问题 – Cameron 2011-03-14 02:02:37