我最近一直在摆弄闪光灯,我遇到了这个问题。我注意到,当我每帧都进行任何填充时,我的cpu使用率会缓慢而稳定地攀升,直到达到85-90%。使用flashPlayerDebugger.exe(来自flex sdk)以及查看broswer中的swf时也会发生这种情况。内存使用量似乎也在缓慢增长,但永远不会失控。
以下是重现的简单flash代码:
import flash.display.Sprite;
import flash.events.Event;
public class test extends Sprite
{
public function test():void
{
stage.addEventListener(Event.ENTER_FRAME, everyFrame);
}
private function everyFrame(e:Event):void
{
this.graphics.beginFill(0x000000);
this.graphics.drawRect(100, 100, 100, 100);
this.graphics.endFill();
}
}
似乎可以使用其他填充形状(例如drawRect,drawCircle等),也可以使用beginBitmapFill。
我似乎无法找到其他任何具有相同问题的实例(搜索过adobe dev论坛,actionscript.org以及此网站等),所以我不知道这是不是我的问题结束,或者如果是闪光问题。
我正在运行最新版本的flash(目前为10.1.102.64),但我也尝试使用旧版本的flashPlayerDebugger.exe(10.1.53.64)并遇到了同样的问题。我正在运行Windows 7。
只是检查是否有其他人遇到过此问题,或者是否有关于我正在进行填充/帧循环的方式。任何帮助将不胜感激。
答案 0 :(得分:2)
请注意,每次绘制时都不会清除图形,而是不断向Sprite添加新填充的形状,这些形状都将被重绘。添加
this.graphics.clear();
在每次抽奖行动之前,你的表现应该会好很多。
另外:你应该总是用那些ENTER_FRAME循环来约束自己 - 在大多数情况下,会有一个成本较低的解决方案,比如MOUSE_MOVE或Timers。