动作脚本位图比矢量更快吗?

我正在开发一个项目,它以帧速率连续绘制圆圈,并在舞台上激活它们,我遇到了性能问题。 我已经将所有对象一旦转换为静态就将它们转换为bitmapData。我的问题是,一旦它们被绘制,将圈子转换为bitmapData会提高性能吗?换句话说,动画说200个位图(透明度)比200个矢量圆快吗? 这种技术有什么缺点吗? (我在考虑不透明度问题?) 如果它们的形状比圆形更复杂,答案会有所不同吗? 有关提高性能的其他提示吗? 非常感谢!     
已邀请:
您可以在此处考虑几种方法: 通过在每个帧上绘制线条和圆圈来投注矢量渲染器。它们每次都会被重新渲染,但那就是Flash经过大量优化的原因,所以这可能比其他选择更快。 (请注意,每帧绘制不同大小的对象可能比将每个对象绘制成
Sprite
并更改其大小更快。) 通过移动位图来对抗矢量渲染器。一个简单的方法(假设您使用AS3绘制形状)将绘制形状为
Bitmap
对象,然后移动它们。你可能不满意结果的唠叨。启用位图平滑将有所帮助(但会降低性能)。 注意:
cacheAsBitmap
可能不会在此处执行您想要的操作,因为当对象更改大小(不确定透明度)时,缓存的位图会重新绘制。 使用cacheAsBitmapMatrix投注硬件加速。这仅适用于AIR,因此可能对您无效。 CABM类似于cacheAsBitmap,但它不会在重新缩放时重绘内容。此外,在许多情况下,位图被传递给硬件,因此可以在GPU上重新缩放。我相信有些平台虽然不起作用。这通常非常快,特别是在移动设备上。 通过将东西blitting到阶段大小的BitmapData来投入AS3位图处理。但请注意,即使你这样做,你仍然需要决定是否每帧都将形状绘制到你的大位图(如选项1),或者将它们绘制成单独的位图,并将每个帧中的那些(转换)blit成大位图(如选项2)。 我认为没有任何方法可以在不进行实验的情况下知道哪个选项最佳。我几乎可以肯定,如果您使用AIR并且如果硬件加速在您的平台上运行,那么选项3将是最好的,但这些可能不是真的。我的直觉是选项4不会非常有用。当您在未转换的舞台上绘制大量静态位图时,Blitting可以非常快,但在这种情况下,您需要生成或转换每帧的内容,所以我的猜测是blitting的好处不会发生在你的瓶颈是。我最好的猜测是选项2会比1更快,但你可能对视觉效果不满意。     
如果你正在寻找性能,你可能想看看Blitting。这是一种过去常用于2D游戏的技术;在Actionscript中,它是通过BitmapData.copyPixels()方法实现的。 在很多情况下,置换列表的速度要快得多;谷歌术语“在AS3中Blitting”,你会发现很多有价值的数据。 8bitrocket.com也有一些很好的教程。     
您可能遇到性能问题的原因有很多。听起来你正在使用
Event.ENTER_FRAME
事件,它会根据帧速率产生动画速度。使用
Timer
类和
TimerEvent.TIMER
查看基于计时器的动画。使用单个
Timer
对象来编排动画可能有助于您实现所需的性能。 您也可以尝试在事件处理程序中的事件对象上调用
updateAfterEvent()
。我不确定Enter_Frame事件是否可以调用
updateAfterEvent()
,但是
TIMER
事件可以。 如果矢量圆圈本身在它们围绕舞台动画时不改变形状,颜色,线宽等,则该过程应该非常有效。诀窍是确保每次更改舞台上的位置时不会渲染它们,但只有在其图形的一个或多个属性发生更改时才会重绘。 如果我必须选择一件事,我会说你的矢量正在重新绘制每个屏幕更新。     

要回复问题请先登录注册