带Flash动画的CPU性能问题
在运行当前应用程序时,我一直在努力将CPU降低到45%以下。我尝试过各种各样的优化技巧,但收效甚微,现在我需要一个基本的解决方案 不同的方法 问题和当前方法 在应用程序的主视图中,我有一个带Flash动画的CPU性能问题,flash,performance,animation,cpu,Flash,Performance,Animation,Cpu,在运行当前应用程序时,我一直在努力将CPU降低到45%以下。我尝试过各种各样的优化技巧,但收效甚微,现在我需要一个基本的解决方案 不同的方法 问题和当前方法 在应用程序的主视图中,我有一个enterframe处理程序。 我的帧速率降到了10 fps。此处理程序通知16个单独的电影剪辑使用绘制不同角度的楔块 因此,每enterframe16次,我就有16部电影唇形图清晰,开始填充,绘制楔形,结束填充,所有这些都由我的单个enterframe处理程序协调 这样做会将我的CPU增加到40-50%:o
enterframe
处理程序。
我的帧速率降到了10 fps。此处理程序通知16个单独的电影剪辑使用绘制不同角度的楔块
因此,每enterframe
16次,我就有16部电影唇形图清晰,开始填充,绘制楔形,结束填充,所有这些都由我的单个enterframe
处理程序协调
这样做会将我的CPU增加到40-50%:o
可能的替代方案?
我有一个想法,就是制作一个360帧长的电影剪辑,用一个面具展示一个圆的各个部分,但我不是动画师,也不知道如何制作这样的面具
问题:
所以,我想我的方法不会解决这个问题。有人能提出一个更好的方法来实现我的目标吗
我不明白每帧绘制16个楔子如何=如此高的CPU,所以我一定是做错了什么
有什么想法吗
主事件功能
private function updatePadProgress(e:Event):void
{
viewStackContainer.remixscreen.padUIManager.updatePadArcs2(this.model.audioEngine._channels)
}
在传递值的所有圆圈中循环
public function updatePadArcs2(channels:Vector.<Channel>):void
{
var pc:PadContainer;
var input:Input
var c:int=0;
var p:int=0;
var pct:Number;
var cc:Channel
var position:int=0
var len:int=0
for (var i:int=0; i < pads.length; ++i)
{
pc=pads[i];
c=pc.channelassign;
p=pc.padassign;
input=channels[c].inputs[p];
if (input.currentState == Input.ACTIVE)
{
position=input.inputAudio.samples.position
len=input.inputAudio.samples.length
pct= position/len
pc.drawProgress(pct)
}
}
}
我想这可能是因为整个屏幕需要重新粉刷。如果减小尺寸或省略填充,它的性能会更好吗 编辑:图像看起来不错。绘制1000条线不应该真的会对性能造成很大影响。然而,填充大面积区域可能会增加。如果你点击同一个像素16次,那么它有可能被实际绘制了16次(优化任意形状的绘制并不那么明显) 格里茨
back2dos对我来说,有效的解决方案是在stage上设置任何资产,而不需要在每个帧缓存为位图时更新这些资产
它将我的CPU降低到20%谢谢你的回复。您是否建议减小圆的大小可以提高性能?目前,每个圆的半径为10像素。@AT:好的,这几乎不是问题所在。尝试省略应用程序的不同部分以隔离performancekiller。如果使用空的
drawProgress
-例程,它的运行情况如何?如果使用空的drawProgress例程,cpu将下降到20%
public function drawProgress(pct:Number):void
{
pad.drawOn.graphics.clear()
pad.drawOn.graphics.beginFill(0x000000)
Wedge.draw(pad.drawOn,0,0,10,360,0)
pad.drawOn.graphics.endFill()
}