【问题标题】:CPU Performance proeblems with Flash animationFlash 动画的 CPU 性能问题
【发布时间】: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


    【解决方案1】:

    对我有用的解决方案是在舞台上设置不需要每帧更新的任何资产以缓存为位图。

    它把我的 CPU 降到了 20%

    【讨论】:

      【解决方案2】:

      我想这可能是由于整个屏幕需要重新粉刷很多。如果缩小尺寸或省略填充,效果会更好吗?

      编辑:code for drawing the wedges 看起来不错。绘制 1000 条线实际上不会对性能造成很大影响。然而,可以填充大面积。如果你击中同一个像素 16 次,它实际上有可能被绘制了 16 次(优化任意形状的绘制不是那么明显)。

      问候
      back2dos

      【讨论】:

      • 感谢您的回复。您是否建议减小圆圈的大小可以提高性能?目前每个圆的半径为 10 像素。
      • @dubbeat:好的,这几乎不是问题。尝试省略应用程序的不同部分以隔离性能杀手。如果您使用空的drawProgress-routine,它的运行情况如何?
      • 如果我使用空的 drawprogress 例程,cpu 会下降到 20%