Flash渲染:优化技巧和窍门
我即将推出一个网站,因此我已经进入了最后阶段。是时候优化宝宝了!该网站总体表现相当不错,平均帧率为32fps。但是在某些繁重的动画部分,它喜欢将几帧降低到约22fps。这不是那么可怕。但是我会尽可能地对其进行调整,以使其尽可能以最高的速度运行。
我可能忽略了一些技巧和窍门,以使这个婴儿的运行更加顺畅。
因此,我借此机会打开此线程,以分享过去曾经帮助过任何忍者技巧。我现在可以想到的我的几个:
排序动画:
让尽可能少的过渡同时发生,尝试使它更多地充当变压器,一次完成一件事情。除了提高动画制作速度之外,我们可能最终还会获得更多的流量。
保持动画对象尽可能小:
因此,闪光灯必须同时计算较少的像素。
cacheAsBitmap = true:
那些大的动画片段,矢量形状在移动,当将它们缓存为位图时,移动速度可能更快。可能会占用内存中的一些空间,但是会占用更高的帧率;)
销毁所有我们不使用的东西:
将那些未使用的动画片段设置为null,然后将其作为子项删除。因此,垃圾收集器会处理它。
解决方案
Alpha透明性可能会很强以进行渲染。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
据我所知,如果对动画进行动画处理,辉光滤镜会造成严重破坏。
尽可能使用visible = false而不是alpha = 0。
即使将其可见性设置为false,Flash(8 ActionScript 2或者更低版本)也将渲染剪辑以阻止其渲染,我们需要将其移出"可见"屏幕(即x = -2000,前提是剪辑宽度小于2000)。
如果我们不对Sprite / MovieClip的转换进行动画处理(例如缩放/旋转等),请仅使用cacheAsBitmap = true:
,否则实际上会使它变慢。
尽可能使用PNG代替矢量形状。
另一个考虑因素是我们使用的补间引擎。如果我们使用的是Flash随附的软件,则可能会通过切换到TweenLite之类的东西(还有很多其他的好东西)来获得一些性能。
请记住,cacheAsBitmap可能非常危险。如果要缩放,旋转或者更新片段本身(例如修改片段内部的Alpha),Flash将必须生成新的快照,这将减慢所有操作的速度。只要仅移动x和y上的剪辑,始终将其打开是一件好事(如果需要旋转,请将其关闭,然后在完成后再打开)。还要注意,如果我们使用过滤器,则cacheAsBitmap始终自动打开->可能会很慢。
保持简单,
Flash将图形渲染为矢量(效果非常好)。对象越复杂,渲染所花费的时间就越多。
还尝试跟踪图形显示树。舞台上的每个孩子都必须单独渲染,因此,如果我们有1000个孩子,这可能会使事情变得很慢。
一种解决方案是在单个对象(如显示处理程序)中渲染一次。我们可能会失去"客观性",但可以通过更快的渲染来弥补。在精灵上创建图块或者许多小"添加项"时,请记住这一点。
我们可能想利用movieclips / sprites等的scrollRect属性...它基本上起着遮罩的作用,但有一个好处,就是我们可以将遮罩的剪辑滚动一些偏移量。
位图缓存仅在缓存的DisplayObject具有复杂的内部部分时会给我们真正的回报,但往往会停留在此处而不会发生变化,例如下拉菜单,该菜单内部具有各种可换肤元素,但仅在其存在时才需要重新渲染。打开或者关闭。请仅由于对象很大而小心打开缓存。
如果不改变大块文本,通常可以将其替换为位图(或者透明的PNG)。这使内容难以维护,但可能会对性能产生重大影响。 (注意:这主要适用于嵌入式字体,尤其是弯曲字体,如亚洲字体,因为这些字体呈现为矢量形状。设备字体由OS呈现,并且产生的开销少得多。)
个人资料,个人资料,个人资料。
如果脚本运行缓慢,请开始追踪时序报告,以找出哪个类,哪个函数,哪个循环,哪个语句使我们变慢。如果图形效果使我们减速,请找出详细的FPS时间报告并开始进行调整。删除该层或者该层时,它会加快速度吗?还是当我们将剪辑更改为不透明时?等等。尝试修复之前,请先找出速度缓慢的问题。
只是四处寻找和重构很少会带来真正的性能改进。