【问题标题】:Why would bitmap outperform vector, as3?为什么位图会胜过矢量 as3?
【发布时间】:2010-04-27 21:55:08
【问题描述】:

为什么位图会胜过矢量?

我的 Flash 用于大型信息亭,具有丰富的媒体要求,并且必须准确地用作柜台。我想保持一切向量以实现可扩展性。

当我做一个简单的 FPS 测试时,我注意到我的位图版本表现完美,而且全矢量文件明显变慢了。

请解释
• 矢量性能
• 我可以应用哪些图形标准
• 使用矢量的解决方案


KIOSK 测试动画
alt text http://www.ashcraftband.com/myspace/videodnd/daemonfps.jpg


结果
• 只有文本和位图表现良好,而不是矢量
• 背景和云彩还可以,但是更多的图层会减慢速度

【问题讨论】:

  • 好吧,你仍然需要渲染输出。对于位图,它只是一个 blit(内存副本),而对于矢量,它是实际的计算和像素的生成。使用基于像素的显示技术,位图总是比矢量更快。
  • @Max 我强烈反对。我绝对希望矢量在 Flash 中的表现优于位图。
  • @Michael:为什么会这样?我了解 Flash 有望成为出色的矢量图形渲染器,但仍需要采取额外的步骤。
  • @Micheal - 对不起,伙计,但位图每次都以速度超过矢量。如果您从作为矢量的库中生成 1000 个旋转的东西,您会注意到机器突突 - 使用位图并且您不会注意到帧率下降。
  • 我的立场是正确的 (kirupa.com/forum/showthread.php?t=87849)。与往常一样,答案是“视情况而定”。

标签: flash actionscript-3


【解决方案1】:

当您了解向量是什么时,这真的很合乎逻辑。

矢量是计算机在屏幕上绘制许多点并将点连接起来并对其着色的视觉表示。这就是矢量放大和缩小看起来都不错的原因。

您可能知道的位图 - 在闪存中被视为像素数据。这只是图片的东西。

当屏幕渲染器矢量时,在每次屏幕重绘时,它必须绘制和映射并重新创建矢量 - 每次都解决它。 使用位图 - 嗯,它是一张图片,因此可以节省所有试图重绘复杂对象和绘制 100 个点的计算能力。

您将所有内容缓存为矢量,您不会注意到丝毫差异。您在舞台上绘制的任何内容 - 选中“缓存为位图”复选框,以及在代码中生成并作为子项添加的任何新项目,cacheAsBitmap = true 在每个视觉对象上。

这里有一个很棒的小技巧应该会很有效。

您仍然可以使用您的向量。但是,当将它们添加到您的舞台时,请选中属性面板中显示设置下方的“缓存为位图”复选框。

在你可以写的代码中

myCloud.cacheAsBitmap = true

该属性可用于每个视觉对象。

当您在舞台上拥有的对象正在做一些简单的事情(例如旋转和褪色)时,这效果最好 - 在执行动画剪辑嵌套动画和类似的东西时,它往往没有那么有效,因为当然,对象仍然需要在每一帧重绘。虽然你仍然会看到很大的进步。


这里有一些来自谷歌搜索“as3缓存为位图”的网址

http://www.adobe.com/devnet/flash/articles/bitmap_caching_03.html

displayObject 的实时文档 - 您会在第一个表中看到它 3 的下方。

http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/display/DisplayObject.html

【讨论】:

  • 只有在 Sprite 不旋转、不连续缩放或将 alpha 设置为
  • @Allan 这是很重要的一点,但经常被忽视。当您转换图形对象(期望 x 或 y 平移)时,缓存的位图不再有效,必须重新计算。如果你改变你的图形,比如说,每一帧(或者经常,像那样模糊),cacheAsBitmap 会让事情变得更糟,而不是更好。
  • 不要尝试使用此答案中的建议而不注意艾伦的评论!
  • 您有参考资料,以便我阅读吗?我总是有点相反的经历。
  • @Glycerine,谢谢。 CasheAsBitmap 为我的矢量动画提供了完整的性能。对于在“没有”alpha 或缩放的情况下在舞台上移动东西,我知道它效果很好。
猜你喜欢
  • 2016-08-09
  • 1970-01-01
  • 2018-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-29
  • 2014-07-19
  • 1970-01-01
相关资源
最近更新 更多