首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >+100个MovieClip拷贝时的AS3 CPU性能

+100个MovieClip拷贝时的AS3 CPU性能
EN

Stack Overflow用户
提问于 2010-08-16 21:55:35
回答 1查看 1.6K关注 0票数 1

我有一个电影剪辑,它有一个简单的动作,形状很简单。此电影剪辑被复制多次以创建图形效果。

随着拷贝的数量或电影剪辑的复杂性的增加,CPU使用率也会上升。从90个拷贝开始,当我将鼠标移动到swf电影的圆圈上时,播放停止(挂起)。当鼠标移动停止时,swf会在正确的位置再次继续,就好像计算已继续,但更新显示并未继续。

现在这是一台四核电脑,我们是2010年...我不能相信也不能接受100 mc是可以渲染的电影片段的最大数量……一定有更好的方法。

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

我使用的是AS3,flash Player9。Movieclip是一个简单的矩形形状,它沿着一个轴移动。

代码语言:javascript
运行
复制
var myLinkage:Class = Class(getDefinitionByName(getQualifiedClassName(McToRepeat)));
var newMC:MovieClip = new myLinkage();
containerMC.addChild( newMC );
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-08-16 23:26:20

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

你通常可以通过在MovieClip继承树上再往上走几步,并从那里构建你自己的图形类来优化Flash呈现。MovieClip有很多很酷的花哨功能,比如时间线、层和内置的鼠标处理。不幸的是,所有这些都占用了内存和CPU时间,而且通常情况下,您不需要所有这些功能。幸运的是,你可以挑选你需要的功能,并摆脱MovieClip的大量多余脂肪。MovieClip继承树的布局使得每个特性都被非常简洁地封装在一个父类中。

例如,在您的应用程序中,您假设MovieClip包含一个遵循简单运动路径的简单形状。我还假设它们不会与鼠标或键盘交互。正因为如此,我们可以在MovieClip的继承树上走得很远。因为你只移动一个形状,而不是真正的动画部分,你可以用补间来代替时间轴动画(我推荐看Greensock的TweenLite )。就在那里,你可以编写自己的类,它是Sprite (而不是MovieClip)的子类,并且可能会获得相当不错的帧率提升。

如果你想进一步优化,你可以更进一步。你也可能不需要层,因为你使用的是一个简单的形状。因此,你可以比DisplayObjectContainer走得更远。因为你不需要交互性,所以InteractiveObject也可以去。所以你已经减掉了很多脂肪,现在你在DisplayObject。由于DisplayObject可能很难使用,因此您可能希望沿着树向下走一步,要么是Shape,要么是Bitmap,具体取决于形状的复杂程度。

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

要回答你关于为什么100个MC很慢的问题,请记住,Flash在虚拟机上运行,而该抽象层占用了大量的资源。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3493802

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档