Flash渲染:优化提示和技巧

时间:2008-09-30 21:03:33

标签: flash actionscript-3 optimization

我即将推出一个网站,所以我已经进入了最后阶段。是时候优化宝宝了!该网站整体表现相当不错,平均帧率为32fps。但是在一些重型动画部件中,它喜欢将几帧降低到大约22fps。哪个不是那么可怕。但是我尽可能地调整它以保持它以尽可能高的速度运行。

我可能会忽略一些提示和技巧,让这个宝宝跑得更顺畅。

因此,我打开这个帖子,分享过去曾经帮助过你的任何忍者技巧。我现在能想到的几个我的:

对动画进行排序:

让尽可能少的转换同时发生,尽量让它更像一个变换器,一次一件事。除了在动画中获得速度之外,你最终可能会获得更多的流量。

让动画对象尽可能小:

因此flash必须同时计算更少的像素。

cacheAsBitmap = true:

那些大的动画片段,矢量形状被移动,当它们作为位图缓存时可能会更快地移动。可能占用你记忆中的一些空间,但任何东西都需要更高的帧率;)

销毁您不使用的所有内容:

将这些未使用的动画片段设置为null,然后将其作为子项删除。所以你的垃圾收集器会处理它。

9 个答案:

答案 0 :(得分:4)

另一个考虑因素是你正在使用的补间引擎。如果你正在使用Flash附带的那个,你可能会通过切换到像TweenLite这样的东西获得一些性能(还有其他多个好的)。

请记住,cacheAsBitmap可能非常危险。如果您正在缩放,旋转或更新剪辑本身(例如修改其中某些内容的alpha),则flash必须生成一个新的快照,这将减慢所有内容的速度。只要您在x和y上移动剪辑,只需始终开启(如果您需要旋转,将其关闭然后在完成后再打开)。另请注意,如果您正在使用过滤器,则cacheAsBitmap会自动始终 - >可能很慢。

答案 1 :(得分:3)

保持简单,

Flash将图形渲染为矢量(非常好)。对象越复杂,渲染所需的时间就越多。

还尝试跟踪图形显示树。舞台上的每个孩子都必须单独渲染,所以如果你有1000个孩子,这可能会让事情变得非常缓慢。

解决方案是在单个对象中渲染一次,就像显示处理程序一样。你可能会失去'对象',但你可以通过更快的渲染来弥补它。在制作瓷砖时要记住这一点,或者对精灵进行一些小的“添加”。

答案 2 :(得分:2)

Alpha透明度可能很难呈现......

从我所听到的情况来看,如果你动画的话,发光滤镜会造成严重破坏。

尽可能使用visible = false而不是alpha = 0.

答案 3 :(得分:2)

如果您没有动画Sprite / MovieClip的转换(例如缩放/旋转等),则仅使用cacheAsBitmap = true:,否则实际上会使其变慢。

尽可能使用PNG而不是矢量形状。

答案 4 :(得分:2)

你可能想要使用movieclips / sprites等的scrollRect属性......它基本上充当了一个掩码,但你可以通过一些偏移来滚动蒙版剪辑。

答案 5 :(得分:2)

大块文本如果不改变,通常可以用位图(或透明PNG)替换。这使得内容难以维护,但它可能会对性能产生重大影响。 (注意:这主要适用于嵌入字体,尤其是像亚洲字体这样的弯曲字体,因为这样的字体会呈现为矢量形状。设备字体由操作系统渲染,产生的开销更少。)

答案 6 :(得分:2)

个人资料,个人资料,个人资料。

如果脚本运行缓慢,请开始跟踪时序报告,以确定哪个类,哪个函数,哪个循环,哪个语句使您变慢。如果图形效果使您减慢速度,请追踪FPS报告的详细时间并开始调整。删除此层或该层时,它会加快速度吗?或者当您更改该剪辑不透明时?等等。在尝试修复之前先隔离慢速。

只是四处寻找和重构很少会让你获得任何真正的性能提升。

答案 7 :(得分:1)

Flash(8 - Actionscript 2或更低版本)将渲染剪辑,即使它的可见性设置为false - 要停止渲染,您需要将其移出“可见”屏幕(即x = -2000,前提是剪辑宽度小于2000)。

答案 8 :(得分:1)

当您缓存的DisplayObject具有复杂的内部部分但倾向于坐在那里而不改变时,位图缓存仅为您提供真正的回报 - 例如下拉菜单,其内部具有各种可换肤元素,但只需要重新进行当它打开或关闭时,它会被释放。因为对象很大,所以要小心打开缓存。