当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《具有+100MovieClip副本的AS3CPU性能》经验,为你挑选了1个好方法。

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

随着副本数量的增加或动画片段的复杂性增加,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 );

tedw4rd.. 8

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

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

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

如果您想进一步优化,可以进一步提升.你也可能不需要图层,因为你使用的是简单的形状.因此,你可以走得更远DisplayObjectContainer.既然你不需要交互性,InteractiveObject也可以去.所以你已经减掉了很多脂肪,现在你已经到了DisplayObject.由于DisplayObject可以均是困难的工作,你可能要往下走的树一步,无论是ShapeBitmap,这取决于你的形状的复杂程度.

再一次,当您决定从Actionscript的内置图形类中需要多少时,您可能必须从那里构建自己的图形类.既然你添加自定义功能,以您的显示对象,您将需要创建自己的类,无论从继承Sprite,ShapeBitmap,并添加该功能存在.

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



1> tedw4rd..:

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

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

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

如果您想进一步优化,可以进一步提升.你也可能不需要图层,因为你使用的是简单的形状.因此,你可以走得更远DisplayObjectContainer.既然你不需要交互性,InteractiveObject也可以去.所以你已经减掉了很多脂肪,现在你已经到了DisplayObject.由于DisplayObject可以均是困难的工作,你可能要往下走的树一步,无论是ShapeBitmap,这取决于你的形状的复杂程度.

再一次,当您决定从Actionscript的内置图形类中需要多少时,您可能必须从那里构建自己的图形类.既然你添加自定义功能,以您的显示对象,您将需要创建自己的类,无论从继承Sprite,ShapeBitmap,并添加该功能存在.

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


谢啦.我们已经创建了一个形状,现在通过代码补间它.有很多计算罪和余数,但差别很大.+1000次移动现在似乎不是问题.:-)
很高兴我能帮助你!x10的增加非常棒!
推荐阅读
女女的家_747
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有