【发布时间】:2025-12-08 01:35:01
【问题描述】:
好吧,在运行当前应用程序时,我试图将 CPU 降低到 45% 以下,这可真是费尽心思。我已经尝试了各种优化技巧和技巧,但收效甚微,现在我正处于我需要从根本上 不同的方法。
问题和当前方法
在我的应用程序的主视图中,我有一个 enterframe 处理程序。
我的帧速率低至 10 fps。此处理程序使用Lee Brimelow's wedge class 通知 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)
}
}
}
绘图功能
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()
}
【问题讨论】:
标签: flash performance animation cpu