Flash actionscript位图是否比矢量更快?
我正在做一个项目,它以帧速率连续绘制圆圈,并在舞台上制作动画,我遇到了性能问题 我已经在将所有对象变为静态后立即转换为位图数据。我的问题是,绘制圆后立即将其转换为位图数据会提高性能吗?换句话说,动画是不是说,200个位图(具有透明度)比200个矢量圆快 这种技术有什么缺点吗?(我想可能会有不透明的问题?) 如果它们是比圆更复杂的形状,答案会不同吗 还有其他关于提高绩效的建议吗Flash actionscript位图是否比矢量更快?,flash,actionscript-3,actionscript,Flash,Actionscript 3,Actionscript,我正在做一个项目,它以帧速率连续绘制圆圈,并在舞台上制作动画,我遇到了性能问题 我已经在将所有对象变为静态后立即转换为位图数据。我的问题是,绘制圆后立即将其转换为位图数据会提高性能吗?换句话说,动画是不是说,200个位图(具有透明度)比200个矢量圆快 这种技术有什么缺点吗?(我想可能会有不透明的问题?) 如果它们是比圆更复杂的形状,答案会不同吗 还有其他关于提高绩效的建议吗 非常感谢 出现性能问题的原因有很多。听起来像是在使用事件。输入_FRAME事件,它根据帧速率生成动画速度。使用timer
非常感谢 出现性能问题的原因有很多。听起来像是在使用
事件。输入_FRAME
事件,它根据帧速率生成动画速度。使用timer
类和TimerEvent.timer
查看基于计时器的动画。使用一个计时器
对象编排动画可能有助于实现所需的性能
您还可以尝试在事件处理程序中的事件对象上调用updateAfterEvent()
。我不确定Enter\u Frame事件是否可以调用updateAfterEvent()
,但计时器
事件可以
如果在舞台周围设置动画时,矢量圆本身不改变形状、颜色、线宽等,则该过程应该相当有效。诀窍是确保它们不会每次在舞台上改变位置时都被渲染,而只是在一个或多个图形属性改变时才被重新绘制
如果我必须选择一件事,我会说你的向量在每次屏幕更新时都会重新绘制自己。如果你在寻找性能,你可能需要查看Blitting。这是一种曾经在2D游戏中大量使用的技术;在Actionscript中,它是通过BitmapData.copyPixels()方法实现的
在许多情况下,显示列表的速度要快得多;在谷歌上搜索“在AS3中进行Blitting”,你会发现很多有价值的数据。也有一些很好的教程。 这里有几种方法可以考虑:
精灵中并更改其大小要快。)
位图
对象中,然后移动这些对象。你可能对结果的参差不齐感到不满意。启用位图平滑将有所帮助(但会降低一些性能)。注意:
cacheAsBitmap
可能不会满足您的要求,因为当对象改变大小时(不确定透明度),缓存的位图会被重新绘制我认为没有任何方法可以不经过实验就知道哪个选项是最好的。我几乎可以肯定,如果您使用AIR,并且硬件加速在您的平台上工作,那么选项3将是最好的,但这些可能不是真的。我的直觉是,选择4不会有太大帮助。当您在未转换的舞台上绘制大量静态位图时,Blitting可以非常快,但在这种情况下,您需要生成或转换每帧的内容,因此我猜Blitting的好处不会出现在瓶颈所在的位置。我的最佳猜测是,选项2将比1快,但您可能对视觉效果不满意。谢谢@elekwent。你认为哪个流程更有效?bitmapData进程?圆圈的大小、位置和不透明性都会发生变化。我指的是,只要向量的图形不是每一帧都重新绘制,在舞台上移动向量是有效的。再次感谢@elekwent。实际上,我正在使用tween类来设置圆的动画,据我所知,它们不是每一帧都重新绘制,而是四处移动。我可以尝试在较低的帧速率下制作动画,但我想保持动作流畅。一个修正:视觉效果应该始终由输入帧事件驱动,而不是计时器。原因是您希望代码在每次屏幕刷新时执行一次。更多的时候,你会浪费CPU在用户看不到的更新上,更少的时候,Flash会浪费CPU重新绘制屏幕,即使没有任何改变。调用
updateAfterEvent
只会让事情变得更糟-它会迫使flash每秒进行更多的重画。如果您只需要此处描述的内容,您可以将DisplayObject的属性cacheAsBitmap
设置为true。啊,是的!我忘了缓存位图!好几年没用了。它帮助了很多,但是对于更复杂的形状仍然存在一些问题。Wh