Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 16.04.2011, 17:16
soulburner вне форума Посмотреть профиль Отправить личное сообщение для soulburner Найти все сообщения от soulburner
  № 1  
Ответить с цитированием
soulburner
 
Аватар для soulburner

Регистрация: Dec 2010
Адрес: Санкт-Петербург
Сообщений: 6
По умолчанию Насильно перерисовать графику (долговыполняющийся код)

Такой вопрос - есть некий кусок кода, который выполняется довольно долго и который невозможно разбить на итерации. Допустим, этот код содержится в методе calculate();

Как мне по-простому сделать, чтобы перед входом в этот код на экране изменился статус и этот экран перерисовался?

Т.е. я хочу сделать что-то такое:

Код AS3:
status.text = "Calculating... Please wait";
calculate();
status.text = "Done!";
На деле это приводит к подвисанию плеера а юзер видит только статус "Done!". Можно ли как-то после установки первого статуса сделать force redraw?

PS: Есть, конечно, вариант выставить статус и поставить запуск calculate() на лисенер ENTER_FRAME для след. фрейма. Но это как-то криво. Есть ли вариант попроще?

Старый 16.04.2011, 18:19
incoob вне форума Посмотреть профиль Отправить личное сообщение для incoob Найти все сообщения от incoob
  № 2  
Ответить с цитированием
incoob

Регистрация: Mar 2008
Сообщений: 215
Это вполне приемлемо в данном контексте.

Старый 16.04.2011, 19:12
soulburner вне форума Посмотреть профиль Отправить личное сообщение для soulburner Найти все сообщения от soulburner
  № 3  
Ответить с цитированием
soulburner
 
Аватар для soulburner

Регистрация: Dec 2010
Адрес: Санкт-Петербург
Сообщений: 6
Цитата:
Сообщение от incoob Посмотреть сообщение
Это вполне приемлемо в данном контексте.
Не очень. У меня уже и так туева хуча разныл лисенеров на ENTER_FRAME. Не хочется выставлять другой, флаги, восстанавливать старый после обработки и т.п.

Хотелось бы более красивого решения.

Старый 16.04.2011, 19:15
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 4  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
Цитата:
Хотелось бы более красивого решения.
хотите дальше.
по теме - делайте через события.

Старый 16.04.2011, 20:35
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 5  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Можно было бы тупо взять конвеер Потапенко и не сильно размышляя об архитектуре загнать в него 3 действия:
Код AS3:
conveyor.add(setWaitText, "please wait...");
conveyor.addFrames(1);// Подождать один кадр
conveyor.add(doHardCalculation);
conveyor.add(setWaitText, "complete");
... если бы он куда-то не пропал из интернета.
А так - коли не можете справиться с асинхронщиной, но она легко выстраивается в цепочку - сделайте свою асинхронную очередь сами.

Старый 16.04.2011, 20:37
mikhailk вне форума Посмотреть профиль Отправить личное сообщение для mikhailk Найти все сообщения от mikhailk
  № 6  
Ответить с цитированием
mikhailk
 
Аватар для mikhailk

Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
Цитата:
На деле это приводит к подвисанию плеера а юзер видит только статус "Done!". Можно ли как-то после установки первого статуса сделать force redraw?
Аварийно:
отложите запуск calculate() на 50-100 мс
либо через таймер либо через setTimeout
FP успеет перерисовать экран и расчет запустится на новом экране

Правильно:
создайте объект, который нужно показать пользователю перед началом расчетов, на его событие ADDED_TO_STAGE повесьте слушателя, который и запустит вычисление

Добавлено через 6 минут
кстати, можно использовать и событие CHANGE текстового поля status
главное только потом отписаться сразу после запуска вычислений

Старый 16.04.2011, 21:24
soulburner вне форума Посмотреть профиль Отправить личное сообщение для soulburner Найти все сообщения от soulburner
  № 7  
Ответить с цитированием
soulburner
 
Аватар для soulburner

Регистрация: Dec 2010
Адрес: Санкт-Петербург
Сообщений: 6
Ясно, спасибо. Собственно, как я и подозревал - придется вешать listener'ы

Создать новую тему Ответ Часовой пояс GMT +4, время: 01:46.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 01:46.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.