我有一个简单的简单形状的动画片段.此影片剪辑会多次复制以创建图形效果.
随着副本数量的增加或动画片段的复杂性增加,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
继承树被布置成使得每个这些功能封装在一个父类非常简洁.
例如,对于您的应用程序,您说您的MovieClip
s包含一个简单的形状遵循一个简单的运动路径.我还假设他们不会与鼠标或键盘交互.MovieClip
因为这个原因,我们可以把继承树推上去.由于你只是移动一个形状,而不是真正动画部分,你可以用补间替换时间轴动画(我建议看看Greensock的TweenLite).在那里,您可以编写自己的子类Sprite
(而不是MovieClip
),并且可能会获得相当大的帧速率增加.
如果您想进一步优化,可以进一步提升.你也可能不需要图层,因为你使用的是简单的形状.因此,你可以走得更远DisplayObjectContainer
.既然你不需要交互性,InteractiveObject
也可以去.所以你已经减掉了很多脂肪,现在你已经到了DisplayObject
.由于DisplayObject
可以均是困难的工作,你可能要往下走的树一步,无论是Shape
或Bitmap
,这取决于你的形状的复杂程度.
再一次,当您决定从Actionscript的内置图形类中需要多少时,您可能必须从那里构建自己的图形类.既然你添加自定义功能,以您的显示对象,您将需要创建自己的类,无论从继承Sprite
,Shape
或Bitmap
,并添加该功能存在.
要回答关于为什么100个MC很慢的问题,请记住Flash在虚拟机上运行,而这个抽象层是一个很大的资源.
swf可能会挂起,因为当您移动鼠标时,您会MOUSE_MOVE
在屏幕上的每个MovieClip上触发事件等.
您通常可以通过在MovieClip
继承树上向上走几步并从那里构建自己的图形类来优化Flash渲染. MovieClip
有很多很酷的铃声和口哨声,比如时间轴,图层和内置鼠标处理.不幸的是,所有这些都占用了内存和CPU时间,而且很多时候,您不需要所有这些功能.幸运的是,你可以选择你需要的功能,并摆脱大量的多余脂肪MovieClip
.该MovieClip
继承树被布置成使得每个这些功能封装在一个父类非常简洁.
例如,对于您的应用程序,您说您的MovieClip
s包含一个简单的形状遵循一个简单的运动路径.我还假设他们不会与鼠标或键盘交互.MovieClip
因为这个原因,我们可以把继承树推上去.由于你只是移动一个形状,而不是真正动画部分,你可以用补间替换时间轴动画(我建议看看Greensock的TweenLite).在那里,您可以编写自己的子类Sprite
(而不是MovieClip
),并且可能会获得相当大的帧速率增加.
如果您想进一步优化,可以进一步提升.你也可能不需要图层,因为你使用的是简单的形状.因此,你可以走得更远DisplayObjectContainer
.既然你不需要交互性,InteractiveObject
也可以去.所以你已经减掉了很多脂肪,现在你已经到了DisplayObject
.由于DisplayObject
可以均是困难的工作,你可能要往下走的树一步,无论是Shape
或Bitmap
,这取决于你的形状的复杂程度.
再一次,当您决定从Actionscript的内置图形类中需要多少时,您可能必须从那里构建自己的图形类.既然你添加自定义功能,以您的显示对象,您将需要创建自己的类,无论从继承Sprite
,Shape
或Bitmap
,并添加该功能存在.
要回答关于为什么100个MC很慢的问题,请记住Flash在虚拟机上运行,而这个抽象层是一个很大的资源.