我即将推出一个网站,所以我已经进入了最后阶段。是时候优化宝宝了!该网站整体表现相当不错,平均帧率为32fps。但是在一些重型动画部件中,它喜欢将几帧降低到大约22fps。哪个不是那么可怕。但是我尽可能地调整它以保持它以尽可能高的速度运行。
我可能会忽略一些提示和技巧,让这个宝宝跑得更顺畅。
因此,我打开这个帖子,分享过去曾经帮助过你的任何忍者技巧。我现在能想到的几个我的:
对动画进行排序:
让尽可能少的转换同时发生,尽量让它更像一个变换器,一次一件事。除了在动画中获得速度之外,你最终可能会获得更多的流量。
让动画对象尽可能小:
因此flash必须同时计算更少的像素。
cacheAsBitmap = true:
那些大的动画片段,矢量形状被移动,当它们作为位图缓存时可能会更快地移动。可能占用你记忆中的一些空间,但任何东西都需要更高的帧率;)
销毁您不使用的所有内容:
将这些未使用的动画片段设置为null,然后将其作为子项删除。所以你的垃圾收集器会处理它。
答案 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具有复杂的内部部分但倾向于坐在那里而不改变时,位图缓存仅为您提供真正的回报 - 例如下拉菜单,其内部具有各种可换肤元素,但只需要重新进行当它打开或关闭时,它会被释放。因为对象很大,所以要小心打开缓存。