【问题标题】:Flash rendering: optimisation tips and tricks [closed]Flash 渲染:优化技巧和窍门 [关闭]
【发布时间】:2009-08-24 17:46:46
【问题描述】:

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

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

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

对动画进行排序:

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

使动画对象尽可能小:

所以 flash 必须同时计算更少的像素。

cacheAsBitmap = true:

那些大的动画剪辑,被移动的矢量形状,当它们被缓存为位图时可能会更快地移动。可能会占用您的内存中的一些空间,但对于更高的帧率来说可以;)

销毁所有你不使用的东西:

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

【问题讨论】:

    标签: flash actionscript-3 optimization


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      保持简单,

      Flash 将图形渲染为矢量(并且非常好)。对象越复杂,渲染时间就越长。

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

      一种解决方案是在单个对象中渲染一次,例如显示处理程序。您可能会失去“客观性”,但可以通过更快的渲染来弥补。在为精灵制作瓷砖或许多小“添加”时请记住这一点。

      【讨论】:

        【解决方案3】:

        Alpha 透明度可能需要大量渲染...

        据我所知,如果您为其设置动画,辉光滤镜会造成严重破坏。

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

        【讨论】:

          【解决方案4】:

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

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

          【讨论】:

            【解决方案5】:

            您可能想要使用movieclips/sprites 等的scrollRect 属性...它基本上充当蒙版,但您可以将蒙版剪辑滚动一些偏移量。

            【讨论】:

              【解决方案6】:

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

              【讨论】:

                【解决方案7】:

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

                如果脚本运行缓慢,请开始跟踪计时报告以找出哪个类、哪个函数、哪个循环、哪个语句让您变慢。如果图形效果让你慢下来,追踪详细的时间 FPS 报告并开始调整。当你删除这个或那个层时它会加速吗?或者当您将该剪辑更改为不透明时?等等。在尝试修复之前找出慢的地方。

                只是四处寻找和重构很少能让您获得任何真正的性能改进。

                【讨论】:

                  【解决方案8】:

                  位图缓存仅在您正在缓存的 DisplayObject 具有复杂的内部部分但倾向于坐在那里而不改变时才给您真正的回报 - 例如下拉菜单,其内部具有各种可换肤元素,但只需要重新- 打开或关闭时渲染。小心不要仅仅因为对象很大就开启缓存。

                  【讨论】:

                    【解决方案9】:

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

                    【讨论】:

                    • 有趣...天哪,这似乎是一个 hack,还有其他方法可以强制 Flash Player 不渲染吗?
                    • 是的,这有点恶心
                    • 这完全不是我的经验,我知道将 alpha 设置为零将使剪辑继续渲染,但我一直假设 visible=false 禁用该剪辑的渲染。
                    • 这是一个 hack,仅 Actionscript 2 或更低版本需要 - 已相应更新答案。
                    猜你喜欢
                    • 2010-10-03
                    • 2010-10-26
                    • 1970-01-01
                    • 1970-01-01
                    • 2011-01-29
                    • 1970-01-01
                    • 2010-11-10
                    • 1970-01-01
                    • 2010-11-18
                    相关资源
                    最近更新 更多