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

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

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

Регистрация: Sep 2009
Сообщений: 12
По умолчанию Индикатор процесса вычисления

Есть следующий код:
Код AS1/AS2:
		for(j=0;y_koor+KVADRAT_SIDE<_root._height;j++)
		{
		  for(i=0;x_koor+KVADRAT_SIDE<_root._width;i++)
		  {	
		  	n=n+1;
			_root.attachMovie("kvadrat", "kvadrat"+n, n, {_x:x_koor,_y:y_koor});
			x_koor=x_koor+KVADRAT_SIDE;
		  }
		  y_koor=y_koor+KVADRAT_SIDE;
		  x_koor=0;
		}
Код создает мелкие квадратики располагая их на холсте поочередно слева направо, сверху вниз. Если квадраты мелкие, а холст большой, то процесс получается повольно долгим.
Я знаю текущее количество созданных квадратиков
Код AS1/AS2:
current=n
и знаю сколько их должно быть в итоге
Код AS1/AS2:
total=(_root._width/KVADRAT_SIDE)*(_root._height/KVADRAT_SIDE)
.
Хочу отображать на экране процесс формирования квадратов в процентах:
Код AS1/AS2:
trace(current/total*100)
, но реально получаю другой результат - приложение подвисает, потом выходит служебное окно "Приложение работает слишком медленно. Прервать выполнение кода? Да/нет". Если нажимаю нет, то все мои trace'ы пачкой выводятся.
Я понимаю, что нужно ставить задержку во время выполнения, но не могу сообразить, как это сделать?

Старый 16.10.2009, 12:29
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 2  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
1. Весь код в кадре, кроме описанных внутри обработчиков событий, выполняется в одном кадре.
2. Пока не выполнится весь код кадра, графически ничего не отображается.
3. Пока не выполнится весь код кадра, новый кадр не отобразится.
4. На отображение одного кадра отведен лимит в 15 секунд.
5. При превышении лимита показывается сообщение "Приложение работает слишком медленно. Прервать выполнение кода? Да/нет"

Итого: Вы создали цикл, код внутри которого не является обработчиком событий, поэтому, пока он не выполнится не будут показаны ваши квадратики, и не будет перехода на новый кадр, что вызывает сообщении о медленной работе.

Поэтому, цикл надо выполнять не весь за раз, по частям, вызывая следующий кусок либо через onEnterFrame или setTimeout/setInterval
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 27.10.2009, 18:51
point111 вне форума Посмотреть профиль Отправить личное сообщение для point111 Найти все сообщения от point111
  № 3  
Ответить с цитированием
point111
[+1 15.06.10]
 
Аватар для point111

Регистрация: Feb 2009
Сообщений: 56
может быть Flasm поможет? сам я им не пользовался, только читал:

Цитата:
Ограничения на время выполнения кода (15 секунд) и длину цепочки рекурсии (256 активаций) появились еще во времена Flash 5 ...
----------------- scip ----------------
... во Flash 7 в формат swf-файлов были внесены изменения. Одним из них стал тег scriptLimits, в котором прописываются соответствующие значения. К сожалению, пока нет возможности произвольным образом задавать время выполнения кода и длину цепочки рекурсии при публикации фильма. Компилятор среды разработки Flash всегда присваивает параметрам тега scriptLimits значения по умолчанию. Заменить их можно, только модифицировав swf-файл при помощи шестнадцатеричного редактора или воспользовавшись Flasm версии 1.51 и выше. Второй способ более простой, так как он не требует от вас знаний архитектуры swf-файла. Например, чтобы разрешить цепочки рекурсии до 1000 активаций и увеличить предельное время выполнения кода до 100 секунд, в сгенерированный Flashm ассемблер нужно добавить следующую строчку:

scriptLimits recursion 1000 timeout 100
from: http://dddcenter.narod.ru/book/flash/gursky/glava20.htm

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

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

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


 


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


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