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

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

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

Регистрация: Feb 2009
Сообщений: 1
По умолчанию Прелоадер для картинок извне (XML)

Добрый день. Говорю сразу - не ругейтесь, я во флэше без году неделя, но при этом активно читаю статьи, книги и смотрю готовые примеры.

Есть флэш под управлением AS2.0, который должен отображать несколько картинок (читайте - фотогалерея). Ссылки на картинки содержатся внутри внешнего XML-файла (вроде как админка). XML выглядит стандартным образом:
Код:
<data xmlns="http://www.w3.org/1999/xhtml">
  <config>
    <item id="1">
      <big>http://somesite.ru/i/big_1.jpg</big> 
      <small>http://somesite.ru/i/small_1.jpg</small> 
      <text>Обаму наконец-то выбрали в президенты</text> 
      <link>http://somesite.ru/news/?newsid=0812908</link> 
    </item>
  </config>
</data>
Айтемов, понятно, несколько. Так вот. Как делается прелоадер для самого флэша (если в него уже встроены картинки) - мне понятно, делаю это посредством getBytesLoaded(), getBytesTotal() и gotoAndPlay( 3 ). Как делать прелоадер XML - тоже есть куча статей, метод почти идентичный. А как сделать, чтобы прелоадились еще и те картинки, адреса на которые указаны внутри XML-ных тэгов? Первыми двумя способами не прокатывает, поскольку картинки все равно упорно подгружаются на лету по ходу пьесы. Обращение происходит следующим образом: в цикле опрашивается XML, затем делаются два массива, содержащие в себе адреса больших и маленьких картинок. Например, так:
Код AS1/AS2:
var smallimages = [];
var smallimages[0] = "http://somesite.ru/i/big_1.jpg";
_root.smallimage_mc = loadMovie( smallimages[0] );
Подозреваю, что грузить клипы на страницу надо не через loadMovie. Но куды бечь?

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

блогер
Регистрация: Mar 2008
Адрес: РФ, Санкт-Петербург
Сообщений: 2,272
Записей в блоге: 5
Отправить сообщение для gloomyBrain с помощью ICQ Отправить сообщение для gloomyBrain с помощью Skype™
Бечь на flasher.ru, куда ж еще =)
Смысл решения таков:
1) создаем объект MovieClipLoader - он понадобится Вам для загрузки картинок, которую легко отследить
Код AS1/AS2:
var mcLoader:MovieClipLoader = new MovieClipLoader();
2) далее нам потребуется узнать, что и откуда грузить. Для этого, понятное дело, надо разобрать Ваш XML и извлечь необходимые данные:
Код AS1/AS2:
// создаем объект XML и предписываем ему игнорировать пропуски
var thumbXML:XML = new XML(); 
thumbXML.ignoreWhite = true;
 
// задаем действие, которое будет выполнено
// сразу после того как XML загрузился
thumbXML.onLoad = function() {
        // в данном примере мы выбираем для
        // работы первый нод внутри главного
        // то есть для Вашего случая это нод <config>
	var thumbMainNode:XMLNode = thumbXML.firstChild;
        // то есть теперь объекту thumbMainNode присвоено
        // все содержимое нода <config>
 
        // в этой переменной будет число нодов в thumbMainNode
        // то есть в Вашем случае - итемов 
	var nodeCount:Number = thumbMainNode.childNodes.length;
 
	ЗДЕСЬ ДОЛЖЕН БЫТЬ ЦИКЛ (СМ НИЖЕ)
 
};
// командуем икс ым элю загружаться
thumbXML.load("http://www.theSite.ru/xml/thumbs.xml");
На данном этапе все готово - XML загружен. надо его только перебрать:
Код AS1/AS2:
for (var i:Number = 0; i<nodeCount; i++) {
        // определяем содержимое нода
	var picURL:String = thumbMainNode.childNodes[i].value;
 
        // создаем под каждую картинку свой мувик
	var thumbClip:MovieClip = scene.createEmptyMovieClip("thumbClip_"+i, scene.getNextHighestDepth());
        // задаем этому мувику координаты
	thumbClip._x = 100*i;
        // заставляем созданный ранее mcLoader грузить картинки !!!
	mcLoader.loadClip(picURL, thumbClip);
}
Осталось для полноты ощущений проследить процесс загрузки
Делается это с помощью все того же MovieClipLoader

Честно говоря, я уже клавиатуру в порошок стёр...
вот Вам рабочий исходник, разбирайтесь, там все просто =)

ЗЫ
только картинки конечно... мда...
Вложения
Тип файла: zip exp.zip (5.6 Кб, 309 просмотров)
__________________
...вселенская грусть

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

Регистрация: Nov 2008
Сообщений: 894
Записей в блоге: 1
gloomyBrain или я непонял что хочет автор или одно из двух.
А как сделать общий! прелоадер для всех фоток подгружаемых через хмл?
Допустим есть галерея на 30 фоток, и яхочу тчо бы пока они не загрузились, она не показывалась (это без проблем), но вот как корректно отобразить процесс их загрузки ума не приложу, точнее приходит то что в первом посте отписал автор...
То есть вводить доп. массивы...
Еще раз поясню на всякий случай, может есть способ посчитать обьем всех картинок, сложить его и отображать относительно уже загруженного контента.

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

блогер
Регистрация: Mar 2008
Адрес: РФ, Санкт-Петербург
Сообщений: 2,272
Записей в блоге: 5
Отправить сообщение для gloomyBrain с помощью ICQ Отправить сообщение для gloomyBrain с помощью Skype™
конечно есть
у Вас же есть XML с данными, оттуда можно взять и количество и размер картинок
(размер может быть сгенерирован сервером). А если не получается размер запихнуть в XML... Нужно грузить по одной картинке, доля загруженного будет равна:
число_загруженных_картинок/число_картинок + доля загрузки загружаемой на данный момент картинки
__________________
...вселенская грусть

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

Регистрация: Nov 2008
Сообщений: 894
Записей в блоге: 1
Цитата:
число_загруженных_картинок/число_картинок + доля загрузки загружаемой на данный момент картинки
Ну так то оно так, но это общая формула, а хочется точности.
К тому же тут есть один большой минус. Фотки грузятся одновременно, допустим первая фотка самая большая, то есть загрузится последней, просверка по идее с первого номера до последнего, то есть пока первая не загрузится то дальше не идет, допустим первая загрузилась ( а остальные значит уже давно загружены, ведь они меньше, но грузятся парралельно), стало быть имеем резкий скачок с 0-10% до 100%. (в теории)
Как я понял все же узнать заранее размер фоток нельзя? Вариант занесения их размера в хмл и считывания его оттуда неподходит, ибо в дальнейшем планирую раздать исходник друзьям, которые врядли будут так напрягаться, да и вообщем то хочется простоты..

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

блогер
Регистрация: Mar 2008
Адрес: РФ, Санкт-Петербург
Сообщений: 2,272
Записей в блоге: 5
Отправить сообщение для gloomyBrain с помощью ICQ Отправить сообщение для gloomyBrain с помощью Skype™
Цитата:
общая формула, а хочется точности.
... А по-моему, Вам хочется готовый код
Цитата:
а остальные значит уже давно загружены
Это при поочередной-то загрузке?! интересно, как?..
Цитата:
друзьям, которые врядли будут так напрягаться
напрягается, обычно, сервер, который динамически формирует xml
__________________
...вселенская грусть

Старый 04.02.2009, 14:08
nOobCrafter вне форума Посмотреть профиль Отправить личное сообщение для nOobCrafter Найти все сообщения от nOobCrafter
  № 7  
Ответить с цитированием
nOobCrafter

Регистрация: Nov 2008
Сообщений: 894
Записей в блоге: 1
Цитата:
... А по-моему, Вам хочется готовый код
код у меня есть, просто происходит вот что, грузится первая фотка (до 100%) далее отображает загрузку второй (примерно 80% и опять до 100%), потом история повторяется (если есть еще незагруженные фотки)
Так гружу картинки что бы они грузились парралельно:
Код AS1/AS2:
for (i = 0; i <= total; i++) 
		{
			imageLoader.loadClip(img[i], hmc['loader_' + i].pic);                   // берем нужную превью из массива и загружаем в нужный мувик
		}
сервера нету, пока недорос до таких тонкостей, хмл делается ручками (во всяком случае пока)

Код AS1/AS2:
loaderListener.onLoadProgress = function(holderClip:MovieClip, loadedBytes:Number, totalBytes:Number):Void 
		{
			var percent:Number = Math.round((loadedBytes / totalBytes) * 100);  // вычисляем количество загруженых байт превьюхи
			load_tf.text = "Загружено " + percent + "%";  // тековое поле находится в руте и одно, а не для каждой фотки свое.
			}
Как видно из скрипта выше, после загрузки первой фотки, значение percent будет равно степени загрузки второй фотки и так далее..
пример можно глянуть тут: rovalantcomplex.com/123

Добавлено через 20 часов 43 минуты
Все получилось сделать, полную загрузку можно отследить так:
Код AS1/AS2:
....бла бла бла...
loaderListener.onLoadProgress = function (holderClip, loadedBytes, totalBytes)
       {
           var percent = Math.round((i + loadedBytes / totalBytes) * 100 / total);  // тут должна получаться общая загрузка
           trace(percent)
};
 
loaderListener.onLoadInit = function (mc)
       {
           ++i;                                                                       // когда первая картинка загружена, то увеличиваем значение "счетчика"
           imageLoader.loadClip(img[i], hmc["loader_" + i].pic); // и соответственно ему грузим следующую, одна за одной
}
imageLoader.loadClip(img[0], hmc["loader_" + 0].pic);        // грузим только первую картинку
i = 0;                  // обнуляем счетчик
В итоге мы получаем красивые значение процентов общей загрузки и последовательную!! загрузку фоток, если проводить загрузку всех вместе (парралельно, то есть через цикл), то такого эффекта врядли удастся добиться, хотя я могу и ошибаться(( У меня проблема была в том что грузил все парралельно((


Последний раз редактировалось nOobCrafter; 05.02.2009 в 10:53.
Создать новую тему Ответ Часовой пояс GMT +4, время: 03:27.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Теги
прелоадер
Опции темы
Опции просмотра
Комбинированный вид Комбинированный вид

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

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


 


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


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