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

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

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

Регистрация: Dec 2006
Сообщений: 230
По умолчанию updateAfterEvent (перерисовка) из цикла (for each)

Как заставить плеер перерисовывать сцену во время бегущего скрипта в цикле for each?
Уже перепробовал все комбинации с:

1) Созданием таймера и вызовом его e.updateAfterEvent();
2) stage.addEventListener(Event.RENDER, handler);
3) stage.invalidate();

Ничего не помогает. Флэшка намертво цепенеет, пока цикл не отработает.

Какие идеи/советы будут?

Старый 31.08.2010, 03:24
kyzi007 вне форума Посмотреть профиль Отправить личное сообщение для kyzi007 Найти все сообщения от kyzi007
  № 2  
Ответить с цитированием
kyzi007

Регистрация: Nov 2008
Сообщений: 78
Бить скрипт на части и выполнять по интервалу (в моем случае это было сжатие энкодером большого количества картинок: сжимала - вызывала по интервалу сохранение следующий).
Пока не выполнится скрипт экран не отрисуется.

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

Регистрация: Dec 2006
Сообщений: 230
Ясно. Значит, по старинке: onEnterFrame и всё такое?

Старый 31.08.2010, 08:01
SunShadow вне форума Посмотреть профиль Отправить личное сообщение для SunShadow Найти все сообщения от SunShadow
  № 4  
Ответить с цитированием
SunShadow
 
Аватар для SunShadow

Регистрация: Apr 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 355
Вам же ясно сказали
Цитата:
Сообщение от kyzi007 Посмотреть сообщение
Пока не выполнится скрипт экран не отрисуется.
Дело в том, что флэш не отрисовывет экран пока идет выполнение кода. Как проверить? Делаем ролик в котором у нас идет движение скажем 100 кадров по прямой из одного угла экрана в другой. Запустите какую нибудь длительную операцию скажем в 3 кадре: это может быть цикл в котором текстовой переменной добавляется по одной букве int.MAX_VALUE. Если у вас комп супер производительный и этого мало можно еще поиск несуществующего символа по строке задать. И я почему то уверен что после 3 кадра флэш надолго зависнет а когда операция будет завершена ваш объект окажется уже в конечной точке.
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ

Старый 31.08.2010, 12:11
nOobCrafter вне форума Посмотреть профиль Отправить личное сообщение для nOobCrafter Найти все сообщения от nOobCrafter
  № 5  
Ответить с цитированием
nOobCrafter

Регистрация: Nov 2008
Сообщений: 894
Записей в блоге: 1
Ariel попробуйте изменить принцип перед циклом, приведите анимацию к некой статичной кратинке и далее запускайте цикл, это будет незаметно, я например блюрю фон и вывожу окошко, мол бла бла бла, идет крутой расчет, потом опять запускаете анимацию.

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

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Цитата:
а когда операция будет завершена ваш объект окажется уже в конечной точке.
Когда операция будет звершена объект окажется в состоянии четвертого кадра.

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

Регистрация: Dec 2006
Сообщений: 230
Да в том-то все и дело, что иногда эти мощные вложенные циклы фигачат дольше 15 секунд... Это никуда не годится ... С этим надо нещадно бороться..

Старый 31.08.2010, 19:09
artcraft вне форума Посмотреть профиль Отправить личное сообщение для artcraft Посетить домашнюю страницу artcraft Найти все сообщения от artcraft
  № 8  
Ответить с цитированием
artcraft
 
Аватар для artcraft

блогер
Регистрация: Aug 2005
Адрес: www.artcraft.cz
Сообщений: 1,967
Записей в блоге: 6
Отправить сообщение для artcraft с помощью ICQ
попробуйте что-то в этом роде: http://www.flasher.ru/forum/showthread.php?t=143906
__________________
Хороший отдых - половина работы.

Старый 31.08.2010, 19:53
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 9  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
Ariel, от всей души сделал Вам пример.

Этот пример выводит на экран количество посчитанных чисел Фибоначчи. За правильность подсчета этих чисел я не ручаюсь, однако пример отлично иллюстрирует обновление экрана между вычислениями.
Код AS3:
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:49.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

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

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


 


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


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