Использование процессора Flash (as3) постоянно увеличивается до 80 +%, делая простой цикл заполнения - PullRequest
0 голосов
/ 24 декабря 2010

Я в последнее время возился со вспышкой и столкнулся с этой проблемой. Я заметил, что, когда я делаю какие-либо заливки в каждом кадре, загрузка моего процессора будет медленно и неуклонно расти, пока не достигнет 85-90%. Это происходит с помощью flashPlayerDebugger.exe (из flex sdk), а также при просмотре SWF-файла в браузере. Использование памяти также медленно растет, но никогда не выходит из-под контроля.

Вот простой флэш-код для воспроизведения:

   
 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.

Просто проверяю, сталкивался ли кто-то еще с этим, или это связано с тем, как я выполняю цикл заполнения / фрейма. Любая помощь будет принята с благодарностью.

1 Ответ

2 голосов
/ 24 декабря 2010

Обратите внимание, что вы не очищаете графику каждый раз, когда рисуете, а постоянно добавляете новые заполненные фигуры в спрайт, которые все будут перерисовываться. Добавить

this.graphics.clear();

перед каждым розыгрышем, и ваша производительность должна быть намного лучше.

Кроме того: вы всегда должны ограничивать себя этими циклами ENTER_FRAME - в большинстве случаев будет более дешевое решение, такое как MOUSE_MOVE или Timers.

...