具有+100 MovieClip副本的AS3 CPU性能

时间:2010-08-16 13:55:35

标签: flash actionscript-3 cpu

我有一个简单形状的简单动画的动画片段。此影片剪辑会多次复制以创建图形效果。

随着副本的数量或动画片段的复杂性增加,CPU使用率会上升。从90份副本开始,当我将鼠标移动到一个圆形的swf电影上时,播放停止(挂起)。当鼠标移动停止时,swf再次继续在正确的位置,就像计算继续,但更新显示器没有。

现在这是一款四核电脑,我们是2010年......我无法相信或接受100 mc是可以渲染的最大动画片数......必须有更好的方法..

显而易见的问题是如何优化CPU性能?

我正在使用AS3,flash player 9。 Movieclip是一个沿着1轴移动的simle矩形形状。

var myLinkage:Class = Class(getDefinitionByName(getQualifiedClassName(McToRepeat)));
var newMC:MovieClip = new myLinkage();
containerMC.addChild( newMC );

1 个答案:

答案 0 :(得分:8)

swf可能会挂起,因为当你移动鼠标时,你会在屏幕上的每一个MovieClip上触发MOUSE_MOVE个事件等。

您通常可以通过在MovieClip继承树上向上走几步并从那里构建自己的图形类来优化​​Flash渲染。 MovieClip有许多很酷的铃声和口哨声,比如时间轴,图层和内置鼠标处理。不幸的是,所有这些都占用了内存和CPU时间,而且很多时候,您不需要所有这些功能。幸运的是,您可以挑选和选择所需的功能,并消除MovieClip所具有的大量多余脂肪。 MovieClip继承树的布局使得每个特性都在一个父类中非常简洁地封装。

例如,对于您的应用程序,您说您的MovieClip包含一个简单的形状遵循一个简单的运动路径。我还假设他们不会与鼠标或键盘交互。因为这个原因,我们可以将MovieClip的继承树推上去。由于您只是移动一个形状,而不是真正动画部分,您可以用补间替换时间轴动画(我建议通过Greensock查看TweenLite)。在那里,您可以编写自己的类Sprite(而不是MovieClip),并且可能会在帧速率上获得相当大的提升。

如果您想进一步优化,可以进一步提升。你也可能不需要图层,因为你使用的是简单的形状。因此,您可以超过DisplayObjectContainer。由于您不需要交互性,InteractiveObject也可以。所以你已经减掉了很多脂肪,现在你处于DisplayObject。由于DisplayObject可能难以使用,因此您可能需要向下一步到ShapeBitmap,具体取决于您的形状有多复杂。

再次,当您决定从Actionscript的内置图形类中需要多少时,您可能必须从那里构建自己的图形类。由于您要向显示对象添加自定义功能,因此您需要创建自己的类,该类继承自SpriteShapeBitmap,并在那里添加该功能。 / p>

要回答关于为什么100个MC很慢的问题,请记住Flash在虚拟机上运行,​​而且这个抽象层是一个很大的资源。