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

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

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

Регистрация: May 2008
Сообщений: 14
Question Прерывания функций

Здравствуйте. Есть необходимость в прерыватели тех или иных действий (в частности загрузки).

Есть несколько MovieClip при клике на которых (onRelease) происходит обращение к xml, где хранятся адреса изображений, с последующей их погрузкой с одну и туже область(в качестве неё используется набор уже существующих MovieClip). При клике на разные MovieClip подгружаются разные виды изображений. Количество подгружаемых изображений при каждом клике около 1000. И если часто и быстро кликать по MovieClip, не дожидаясь завершения прежней загрузки, ролик начинает тормозить и загружать изображения с опозданиями. Примерный код:


Код:
xmlImage = new XML();
xmlImage.ignoreWhite = true;
xmlImage.load("xmlImageAddress.xml");
xmlImageList = new XML();
xmlImage.onLoad = function() {
   xmlImageList = xmlImage.firstChild.childNodes;
   for (count=0; count < xmlImageList.length; count++){
      _root[‘mc’ + count].number = count
      _root[‘mc’ + count].onRelease = function(){
         for (secondCount=0; secondCount <1000; secondCount ++) {
            _root[‘mcImage’+ secondCount].loadMovie(xmlImageList[this.number].childNodes[secondCount].firstChild);}
         }
      };
   };
};
Где:

xmlImageAddress.xml – файл с адресами изображений;
mc – MovieClip'ы, при клике на которые происходят события загрузки;
count – счетчик с максимальным значением, равным количеству видов изображений;
secondCount – счётчик используемый при загрузке 1000 изображений того или иного вида;
number – переменная в которой хранится порядковый номер вида изображения;
mcImage – MovieClip’ы , заранее существующие, в которые подгружаются изображения того или иного вида.


Необходимо, чтоб при каждом событии onRelease предыдущая загрузка и обращения к xml прерывались и запускалось новая. Заранее благодарен.

Старый 24.05.2008, 14:27
Alex_beginner вне форума Посмотреть профиль Отправить личное сообщение для Alex_beginner Найти все сообщения от Alex_beginner
  № 2  
Ответить с цитированием
Alex_beginner
 
Аватар для Alex_beginner

Регистрация: May 2008
Сообщений: 476
Есть у меня смутные мысли, что тут нужно использовать исключения, т.е. такие вещи как throw и класс Error. Хотя я могу ошибаться.

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

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,879
Записей в блоге: 7
Класс XML, единственный класс, загрузку у которого прервать нельзя, load (null) не помогает и файлы грузятся до конца.
Можно конечно подписывать onLoad через Delegate, а потом писать
Код:
xml.onLoad = null;
delete xml;
и начинать новую загрузку. НО у IE и FF одновременно может грузиться только два потока, а как я сказал выше загрузку XML прервать нельзя, поэтому сколько бы вы не отписывались, до тех пор пока предыдущие xml не загрузятся, новые грузится не будет.
К примеру нажмем 20 раз, запустим 20 загрузок, но грязятся только первые два. Как только один из них загрузился, пошел 3, потом 4 и тд. Но если первые грузились долго, то к 20-ой может быть таймаут и соединение будет разорвано и в результате, самую последнию и актуальную загрузку вы не получите.

Кто-то тут делал ход конем и грузил через javascript, так как js нормально загрузку xml убивает, а потом вроде из кеша брал. Но эта схема весьма сложная, и я бы не сказал, что надежная. Но иначе только блокировать кнопку загрузки на время самой загрузки.
__________________
(и)Нильс.ru | Плагины для FlashDevelop


Последний раз редактировалось iNils; 25.05.2008 в 14:49.
Старый 25.05.2008, 11:27
port вне форума Посмотреть профиль Отправить личное сообщение для port Найти все сообщения от port
  № 4  
Ответить с цитированием
port

Регистрация: May 2008
Сообщений: 14
Спасибо за подробное описания. Не мог ли бы вы подсказать, как должна выгледить функция, которая служила бы своебразным прелоудером и чтоб цикл

Код:
 for (secondCount=0; secondCount <1000; secondCount ++) {
            _root[‘mcImage’+ secondCount].loadMovie(xmlImageList[this.number].childNodes[secondCount].firstChild);}
         }
не заканчивался ранее, чем загрузится последнее изображения. AS выполняется вроде асинхроно и если не поставить такого прелоудера на этот цикл, изображения будут грузится одно за другим, а события прописаные после цикла - например, разблокирование всех кнопок загрузки после окончаниязагрузки изображений - будут выполнятся внезависимости от того, они загрузились или нет. Заранее благодарен. И ещё раз спасибо за описание.

Старый 25.05.2008, 13:21
DarkLight вне форума Посмотреть профиль Отправить личное сообщение для DarkLight Посетить домашнюю страницу DarkLight Найти все сообщения от DarkLight
  № 5  
Ответить с цитированием
DarkLight
ветеран форума
 
Аватар для DarkLight

Регистрация: May 2006
Адрес: Москва
Сообщений: 2,978
Отправить сообщение для DarkLight с помощью ICQ Отправить сообщение для DarkLight с помощью Skype™
Вместо loadMovie, который давно устарел, используйте MovieClipLoader. Там есть обработчики onProgress и onLoadInit, куда и можно прописать отображение прелоадера с % и реактивацию кнопок соответственно. Пример нормальный есть во флешовом хелпе, да и на форуме много раз обсуждалось, можно найти
__________________
4am is time to rock

Старый 25.05.2008, 14:21
port вне форума Посмотреть профиль Отправить личное сообщение для port Найти все сообщения от port
  № 6  
Ответить с цитированием
port

Регистрация: May 2008
Сообщений: 14
Цитата:
Вместо loadMovie, который давно устарел, используйте MovieClipLoader.
Спасибо за ориентир - буду искать и смотреть. Если же возникнет (найдется / вспомнится) набросок MovieClipLoader в контексте примера очень схожим с моим :

Код:
for (secondCount=0; secondCount <1000; secondCount ++) {
            _root[‘mcImage’+ secondCount].loadMovie(xmlImageList[this.number].childNodes[secondCount].firstChild);}
         }
пишите или скидывайте ссылки. Заранее благодарен и ещё раз спасибо за ориентир.

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

Теги
break , loadmovie , onload , загрузка , прерывание
Опции темы
Опции просмотра

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

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


 


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


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