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

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

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

Регистрация: Mar 2009
Сообщений: 6
По умолчанию вопрос про preloader

Здравствуйте.
Обычно я делал прелоадеры стандартно через _root.getBytesLoaded(); и _root.getBytesTotal(); Сейчас у меня есть ролик, в котором большое количество фотографий подгружается динамически. Мне нужно, чтобы ролик начинался только когда все фото загрузятся, и соответственно, показывался процент загрузки всего объёма данных — и ролика и фоток. Будет ли этот способ работать или он коснётся только загрузки самого swf, который весит пару десятков КБ? Если нет, то как сделать правильно?

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

Регистрация: Nov 2008
Сообщений: 894
Записей в блоге: 1
Фотки грузим последовательно, одна за одной и прелоадер это отображает, и пока все фотки не загрузятся ничего не будет. Присутствуют прилоадеры для хмл и фоток.
Код AS1/AS2:
var img:Array = new Array();  // делаем пустые массивы для работы с ними
var title_pic:Array = new Array();  // в них будем вносить разную информацию из хмл листа
var des:Array = new Array();  // например название фотки, путь к ней, различные коментарии..
var i:Number = 0; // вводим переменную для подсчета чего-либо
var total:Number;// вводим переменную для подсчета записей в хмл
var stage_width:Number = Stage.width;              // переменная для определения размеров сцены
var stage_height:Number = Stage.height;            // переменная для определения размеров сцены
// эти 2 переменные я использовал для дальнейшей работы с приложением, вы можете их просто заменить на размеры сцены, кому что удобнее.
//Подключаемся к XML
myXML = new XML();
myXML.ignoreWhite = true;
myXML.load("myPics.xml");
 
function createNewMc(i)  // функция создания пустых мувиков для картинок
{
mc = hmc.createEmptyMovieClip('loader_'+ i, i);          //создаем в мувике контейнере превьюшек мувики для каждой фотографии 
mc._x = stage_width * i;// ставим их в порядке один за другим, умножаем на размер фотки 
//З.Ы. у меня получилась 1 большая фотка размеров со "сцену", вы можете поставить свой размер
   pic = mc.createEmptyMovieClip('pic', i); // в принципе что бы центрировать фотку, мы делаем еще один клип контейнер и его уже центрируем %)
}                                        
 
///////////-------------------- Прелоадер для хмл-----------------------///////////
xml_progressBar_mc = _root.createEmptyMovieClip("xml_progressBar_mc", _root.getNextHighestDepth());
 xml_progressBar_mc.createEmptyMovieClip("bar_mc", _root.xml_progressBar_mc.getNextHighestDepth());
 xml_progressBar_mc.createEmptyMovieClip("stroke_mc", _root.xml_progressBar_mc.getNextHighestDepth());
 with (xml_progressBar_mc.stroke_mc) {
   lineStyle(0, 0xFFFFFF, 70);
   moveTo(0, 0);
   lineTo(100, 0);
   lineTo(100, 5);
   lineTo(0, 5);
   lineTo(0, 0);
 }
 with (xml_progressBar_mc.bar_mc) {
   beginFill(0x99FF00, 100);
   moveTo(0, 2);
   lineTo(100, 2);
   lineTo(100, 4);
   lineTo(0, 4);
   lineTo(0, 2);
   endFill();
   _xscale = 0;
 }
 xml_progressBar_mc._visible = false;                                   // рисуем прогресс-бар для хмл
xml_load_tf = _root.createTextField('xml_load_tf', _root.getNextHighestDepth(), 0, 0, 100, 22);
 xml_load_tf.selectable = false;
 xml_load_tf._x = (stage_width - xml_load_tf._width) / 2;
 xml_load_tf._y = (stage_height - xml_load_tf._height) / 2;
 
 var my_fmt:TextFormat = new TextFormat();
 my_fmt.color = 0xFFFFFF;
 my_fmt.size = 12;
 my_fmt.font = "Trebuchet MS";                                   // создаем тектовое поле прогресс-бара
 
onEnterFrame = function()
{
var loaded = myXML.getBytesLoaded() + _root.getBytesLoaded();
var total = myXML.getBytesTotal() + _root.getBytesTotal();
var percent = Math.round( loaded / total * 100);
 
if( !isNaN(percent))
{
 xml_load_tf.text = "Загрузка XML";//"Загружено " + percent + "%";
 xml_load_tf.autoSize = true; 
 xml_load_tf.setTextFormat(my_fmt);
 xml_load_tf._x = (stage_width - xml_load_tf._width) / 2;
   //trace(percent)
 xml_progressBar_mc._visible = true;
 xml_progressBar_mc._x = (stage_width - 100) / 2;
 xml_progressBar_mc._y = xml_load_tf._y + xml_load_tf._height + xml_progressBar_mc._height;
 xml_progressBar_mc.bar_mc._xscale = percent;
} else {
 xml_load_tf.text = "Загрузка XML";
 xml_load_tf.autoSize = true; 
 xml_load_tf.setTextFormat(my_fmt);
}
 
if ( loaded == total) // когда все загружено 
{
 delete onEnterFrame; 
 xml_progressBar_mc.removeMovieClip();                               // удаляем что не нужно
 xml_load_tf.removeTextField();
} 
}                                   // прелоадер
myXML.onLoad = function(success) // когда хмл лист загружен проверяем
{
if (success)  // если он загружен то выполняем что нам надо, если нет то выводим сообщение об ошибке, но это ниже
{
 var nodes = this.firstChild.childNodes;
 total = nodes.length;                       // узнаем количество записей (картинок)
 
 for (i = 0; i < total; i++) 
 {
  title_pic[i] = nodes[i].attributes.title; // пробегаемся по хмл-файлу, считываем что нам нужно
  img[i] = nodes[i].attributes.img;         // и заносим все данные в соответствующие массивы,
  des[i] = nodes[i].attributes.description; // для дальнейшей работы с ними
 }
 ///////////------------------- Грузим фотки -----------------------///////////
 hmc = createEmptyMovieClip('holder_mc', 1);  // создаем мувик, который будет содержать все картинки нашей галлереи
 /// Создаем столько мувиков с картинками, сколько собственно картинок в XML
 
 for (i = 0; i < total; i++) 
 {
  createNewMc(i);                          // функция создания пустых мувиков для картинок
 }
 
 progressBar_mc = _root.createEmptyMovieClip("progressBar_mc", _root.getNextHighestDepth()); // тут будем делать прилоадер для загрузки картинок
 progressBar_mc.createEmptyMovieClip("bar_mc", _root.progressBar_mc.getNextHighestDepth());  // в силу того что прелоадер должен быть маленьким - просто
 progressBar_mc.createEmptyMovieClip("stroke_mc", _root.progressBar_mc.getNextHighestDepth());  // рисуем его, пример их хелпа)
 with (progressBar_mc.stroke_mc) {  // рисуем рамку
   lineStyle(0, 0xFFFFFF, 70);
   moveTo(0, 0);
   lineTo(100, 0);
   lineTo(100, 5);
   lineTo(0, 5);
   lineTo(0, 0);
 }
 with (progressBar_mc.bar_mc) {  // рисуем сам прогрессбар
   beginFill(0xFF0000, 100);
   moveTo(0, 2);
   lineTo(100, 2);
   lineTo(100, 4);
   lineTo(0, 4);
   lineTo(0, 2);
   endFill();
   _xscale = 0;
 }
 progressBar_mc._visible = false;                                  
 load_tf = _root.createTextField('load_tf', _root.getNextHighestDepth(), 0, 0, 100, 22); // создаем тектовое поле прогресс-бара
 load_tf.selectable = false;
 load_tf._x = (stage_width - load_tf._width) / 2;
 load_tf._y = (stage_height - load_tf._height) / 2;
 
 var my_fmt:TextFormat = new TextFormat();
 my_fmt.color = 0xFFFFFF;
 my_fmt.size = 12;
 my_fmt.font = "Trebuchet MS";                                   
 
 // Создаем слушатель чтоб наблюдать за загрузкой превьюх
 var loaderListener:Object = new Object();
 loaderListener.onLoadStart = function(holderClip:MovieClip) {}; // тут перечисляются события загрузки
 // все их описывать небуду, просто приведу что начинается со старта, и использую что нам надо, остальное можно взять в хелпе
 loaderListener.onLoadProgress = function(holderClip:MovieClip, loadedBytes:Number, totalBytes:Number):Void // в момент загрузки картинок...
 {
  var percent:Number = Math.round((i + loadedBytes / totalBytes) * 100 / total);  // вычисляем количество загруженых байт превьюхи
 
  load_tf.text = "Загрузка изображений";//"Загружено " + percent + "%"; // если хотим что бы отображалось попроцентно то вместо надписи пишем то что в коментарии
  load_tf.autoSize = true; // применяем расширение к тексту
  load_tf.setTextFormat(my_fmt); // применяем текстформат
  load_tf._x = (stage_width - load_tf._width) / 2;  // расоплогаем по оси х (центрируем)
 
  progressBar_mc._visible = true; // выводим прогрессбар
  progressBar_mc._x = (stage_width - 100) / 2; // центрируем его
  progressBar_mc._y = load_tf._y + load_tf._height + progressBar_mc._height;
  progressBar_mc.bar_mc._xscale = percent; // чем больше процент загрузки тем больше полоска
 };
 
 loaderListener.onLoadInit = function(mc:MovieClip)                      // когда загрузка завершена
 { 
  i++                       // вот тут, уже i = 1 и дальше его увеличиваем
  imageLoader.loadClip(img[i], hmc['loader_' + i].pic);               // берем нужную превью из массива и загружаем в нужный мувик
 
  if ( i == total)                                                    // когда загружены ВСЕ картинки
  {
   progressBar_mc.removeMovieClip();                               // удаляем что не нужно
   load_tf.removeTextField(); 
// тут же уже можно писать что будет после того как фотки загрузятся, допустим переход на второй кадр или что то такое.
  }
  mc.img_width = mc._width;                                              // получаем размеры фоток;)
  mc.img_height = mc._height;                                            // получаем размеры фоток;)                         // так же тут уже можно центрировать нашу картинку, или выровнять по другому
 };       
 
 ////// Загружем картинки в мувик контейнер
 var imageLoader:MovieClipLoader = new MovieClipLoader();
 imageLoader.addListener(loaderListener);
 
 imageLoader.loadClip(img[0], hmc['loader_' + 0].pic);                   // берем первую картинку из массива и загружаем в нужный мувик 
 i = 0;                                                                  // тут ставим число картинок в 0, потому что при загрузке мы будем их считать опять.
} else {              // если же загрузки хмл небыло то
 createTextField("error", this.getNextHighestDepth(), 0, 0, 120, 20); // делаем текстовое поле с ошибкой
 error.selectable = false;
 
 var my_fmt:TextFormat = new TextFormat();
 my_fmt.color = 0xFF0000;
 my_fmt.size = 12;
 my_fmt.font = "Trebuchet MS";                                  
 
 error.text = "Sorry, but XML-file is not loaded!";
 error.autoSize = true; 
 error.setTextFormat(my_fmt);
 error._x = (stage_width - error._width) / 2;
 error._y = (stage_height - error._height) / 2;
}
по хорошему надо грузить так. Это пример загрузки с использованием хмл листа.

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

Регистрация: Nov 2008
Сообщений: 894
Записей в блоге: 1
извиняюсь но в один пост не влезло(
---------------------- продолженние
хмл выглядит так:
Цитата:
<?xml version="1.0" encoding="utf-8" ?>
<items>
<item img="myPics/IMGP1622.jpg"
title = "Фотка - 1"
description="" />

<item img="myPics/IMGP1155.jpg"
title = "Фотка - 2"
description="Фотка - 9." />

<item img="myPics/IMGP1343.jpg"
title = "Фотка - 6"
description="Фотка - 9." />

<item img="myPics/IMGP1609.jpg"
title = "Фотка - 8"
description="Фотка - 8." />

</items>
Файл сохраняется В КОДИРОВКЕ UTF-8 (ФАЙЛ-СОХРАНИТЬ КАК.. И там выбраем) иначе русские буквы отображены небудут.
Прошу обратить внимание на запись атрибутов - img, title, description - именно их мы считываем во флеше и заносим эти данные в массив используя *.attributes.title(img, description)

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

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

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


 


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


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