|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Dec 2006
Сообщений: 230
|
updateAfterEvent (перерисовка) из цикла (for each)
Как заставить плеер перерисовывать сцену во время бегущего скрипта в цикле for each?
Уже перепробовал все комбинации с: 1) Созданием таймера и вызовом его e.updateAfterEvent(); 2) stage.addEventListener(Event.RENDER, handler); 3) stage.invalidate(); Ничего не помогает. Флэшка намертво цепенеет, пока цикл не отработает. Какие идеи/советы будут? |
|
|||||
Регистрация: Nov 2008
Сообщений: 78
|
Бить скрипт на части и выполнять по интервалу (в моем случае это было сжатие энкодером большого количества картинок: сжимала - вызывала по интервалу сохранение следующий).
Пока не выполнится скрипт экран не отрисуется. |
|
|||||
Регистрация: Dec 2006
Сообщений: 230
|
Ясно. Значит, по старинке: onEnterFrame и всё такое?
|
|
|||||
Регистрация: Apr 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 355
|
Вам же ясно сказали
Дело в том, что флэш не отрисовывет экран пока идет выполнение кода. Как проверить? Делаем ролик в котором у нас идет движение скажем 100 кадров по прямой из одного угла экрана в другой. Запустите какую нибудь длительную операцию скажем в 3 кадре: это может быть цикл в котором текстовой переменной добавляется по одной букве int.MAX_VALUE. Если у вас комп супер производительный и этого мало можно еще поиск несуществующего символа по строке задать. И я почему то уверен что после 3 кадра флэш надолго зависнет а когда операция будет завершена ваш объект окажется уже в конечной точке.
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ |
|
|||||
Ariel попробуйте изменить принцип перед циклом, приведите анимацию к некой статичной кратинке и далее запускайте цикл, это будет незаметно, я например блюрю фон и вывожу окошко, мол бла бла бла, идет крутой расчет, потом опять запускаете анимацию.
|
|
|||||
Регистрация: Dec 2006
Сообщений: 230
|
Да в том-то все и дело, что иногда эти мощные вложенные циклы фигачат дольше 15 секунд... Это никуда не годится ... С этим надо нещадно бороться..
|
|
|||||
попробуйте что-то в этом роде: http://www.flasher.ru/forum/showthread.php?t=143906
__________________
Хороший отдых - половина работы. |
|
|||||
блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
|
Ariel, от всей души сделал Вам пример.
Этот пример выводит на экран количество посчитанных чисел Фибоначчи. За правильность подсчета этих чисел я не ручаюсь, однако пример отлично иллюстрирует обновление экрана между вычислениями. package { import flash.display.Sprite; import flash.events.TimerEvent; import flash.text.TextField; import flash.text.TextFieldAutoSize; import flash.utils.getTimer; import flash.utils.Timer; public class Main extends Sprite { private var _numbers:Vector.<int>; private var _timer:Timer; private var _textField:TextField; public static const ONE_PART_OF_TIME:uint = 200; private var _time:int; public function Main():void { _timer = new Timer(100); _timer.addEventListener(TimerEvent.TIMER, operate); _numbers = new Vector.<int>; _numbers[0] = 0; _numbers[1] = 1; _textField = new TextField(); _textField.autoSize = TextFieldAutoSize.LEFT; super.addChild(_textField); operate(null); _textField.text = "Wait..."; } private function operate(event:TimerEvent):void { _timer.stop(); _time = getTimer(); while (getTimer() - _time < ONE_PART_OF_TIME) { var l:int = _numbers.length; _numbers[l] = _numbers[l - 1] + _numbers[l - 2]; } _textField.text = "Current calculated: " + (l + 1); _timer.start(); } } }
__________________
Тут мужик танцует и поёт про флэш |
Часовой пояс GMT +4, время: 04:22. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|