Остановить рендеринг во Flash с ActionScript 3 - PullRequest
1 голос
/ 15 апреля 2011

Вот моя проблема: у меня есть несколько экранных объектов, которые модифицируются циклом, и я хотел бы, чтобы flash отображал ровно один кадр в конце каждого цикла.Продолжительность цикла может изменяться непредсказуемо, поэтому постоянная частота кадров этого не сделает.

Я нашел хакерский способ визуализации одного кадра в конце каждого цикла, используя updateAfterEvent с таймером 0 мс.Теперь я хочу, чтобы Flash не отображал кадры в середине цикла: это пустая трата времени и ресурсов и дает странные мигающие эффекты.Установить частоту кадров в 0 было бы простым решением, но stage.frameRate имеет минимальное значение 0,01.

Вопрос 1: Есть ли способ правильно остановить стандартный цикл рендеринга?Обходной путь не будет рассматриваться как правильный ответ, потому что в настоящее время я делаю довольно хороший обходной путь (1 кадр каждые 100 секунд терпимо).

Вопрос 2: Есть ли лучший способ, чем updateAfterEvent, чтобызаставить рендеринг?

Упс, я забыл про цивилизацию.Доброе утро / день, пожалуйста, заранее спасибо.

Ответы [ 2 ]

1 голос
/ 15 апреля 2011

Существуют разные способы решения этой проблемы, хотя это похоже на проблему с вашим дизайном в целом, а не на ограничения во Flash. Я думаю, что длительный цикл имеет тенденцию быть плохой идеей .... Если вам нужен полный контроль, я бы за кадром все выводил, а не прикреплял ваши текущие объекты к DisplayList. Это требует добавления addChild'а к неприкрепленному спрайту, а затем его рисования, когда вы хотите. Недостатком здесь является то, что вы не получите никакого mouseevent / keyboardevent.

выглядит как:

var bmp:BitmapData = new BitmapData(800,600,true);
var container:Sprite = new Sprite();

// add all your display objects to the container

stage.addChild(new Bitmap(bmp))

// render loop
for each (var dsp:DisplayObject in objects) {
    // stuff
}

// clear our bitmap
bmp.fillRect(bmp.rect, 0);
bmp.draw(someContainer);
1 голос
/ 15 апреля 2011

Нет ничего плохого в использовании updateAfterEvent для принудительного рендеринга перед следующим запланированным обновлением рендеринга, но ваш расточительный таймер нежелателен (слишком много вызовов функций).Вместо этого отправьте свое собственное событие рендеринга в конце цикла, прослушайте его и затем updateAfterEvent ().

Тем не менее, вы не должны видеть рендеринг вещей в середине цикла, если мыречь идет о цикле for, while и т.д ..Flash не рендерится во время синхронного выполнения кода.Эта часть заставляет меня задуматься о том, что на самом деле происходит в вашем коде.

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