Динамическая загрузка роликов — КиберПедия 

Историки об Елизавете Петровне: Елизавета попала между двумя встречными культурными течениями, воспитывалась среди новых европейских веяний и преданий...

Папиллярные узоры пальцев рук - маркер спортивных способностей: дерматоглифические признаки формируются на 3-5 месяце беременности, не изменяются в течение жизни...

Динамическая загрузка роликов

2017-06-19 81
Динамическая загрузка роликов 0.00 из 5.00 0 оценок
Заказать работу

Команды loadMovie и loadMovieNum необходимы для загрузке и выгрузке исполняющимся роликом других роликов. Подгружаемый ролик может быть помещён в клип или в отдельный слой, как при дублировании клипов. Динамическая загрузка роликов особенно важна в больших проектах – flash сайтах, или больших презентациях. Если сайт организован в виде нескольких swf файлов, то они могут подгружаться по мере движения пользователя по сайту. Та часть информации, которая пользователя не интересует, так и не будет загружена. Что касается flash – презентаций, то при больших размеров исходного файла удобно бывает разбить его на несколько частей. Постоянная компиляция 10 мегабайт - дело довольно утомительное. Начнём с простейшего примера. Пусть один исполняющийся ролик сменяется другим. Создайте два ролика с анимацией.

Сохраните их в одной папке, например в папке test под именами 1.fla и 2.fla. Имена папок и файлов не должны содержать русских букв. Откомпилируйте файлы после сохранения. Теперь в папке test возникли файлы 1.swf и 2.swf. Теперь, для того, что бы после окончания проигрывания ролика 1 начался ролик 2 присвойте последнему кадру ролика 1.fla следующий скрит

loadMovieNum ("2.swf", 0);

В качестве первого аргумента функции указано имя подгружаемого файла, а в качестве втоорого – уровень на который он подгружается. В данном случае, так как файлы лежат в одной папке – указано лишь имя файла. Если в папке test создать папку folder и переместить туда ролик 2.swf, то команду придётся изменить на

loadMovieNum ("folder\\2.swf", 0); или loadMovieNum ("folder/2.swf", 0);

В качестве ссылки может быть использован и URL, например, http://cko1.narod.ru/2.swf

Обратите внимание, что после загрузки второго ролика от первого не остаётся и следа. Если в первом ролике создаётся переменная, то во втором она уже не существует.

Продолжим наши исследования. Измените во втором ролике размеры сцены, цвет фона и частоту смены кадров, используя диалог Modify – Movie. Вернитесь в ролик 1 и откомпилируйте его. Для чистоты эксперимента запустите 1.swf непосредственно из папки folder. Оказывается, и цвет и размеры сцены перешли от первого ролика ко второму без изменений. Зато частота кадров изменилась! Сразу напрашивается простое решение проблемы разной скорости у пользователей. Если создать несколько вариантов ролика с разными скоростями то можно подгружать один из них, в зависимости от возможностей техники конкретного посетителя и скорости соединения. Скорость может выбрать сам посетитель, или её можно рекомендовать, например, сравнив значения функции getTimer() в кадрах между которыми находится сложная анимация. Скорость так же легко оценить используя свойство _framesloaded линейки или какого либо клипа.

Теперь попытаемся подгрузить ролик 2 в другой слой. Измените скрипт на

loadMovieNum ("folder\\2.swf", 1);

Теперь частота кадров подгруженного ролика не отличается от частоты первого.

Для погрузки ролика в экземпляр клипа необходимо использовать синтаксис

loadMovie(«файл» «экземпляр»)

Таким образом, команда

loadMovie ("f/2.swf", "_root");

эквивалентна загрузки ролика в нулевой слой. Для загрузки в экземпляр с именем q необходимо записать

loadMovie ("f/2.swf", "_root.q");

Обратите внимание, что левый верхний угол подгружаемого ролика находится точно в центре экземпляра. Разумеется, потом можно программно расположить его в другой позиции.

Интересно поведение команды dupliCateMovieClip. Если дублируется клип, в который предварительно подгружен внешний ролик, то копии будут представлять собой исходные клипы как будто подгрузки и не происходило.

Для обратной операции – выгрузки ролика необходимо использовать команды

unloadMovie ("имя экземпляра"); или unloadMovieNum (уровень);

Выгрузить можно любой экземпляр клипа, а не только те которые были динамически подгружены.

По аналогии с динамической загрузкой роликов, командами loadVariablesNum (“файл”,”уровень”); и loadVariables("файл", “ экземпляр”); можно производить чтение данных из текстовых файлов. При этом формат данных в текстовом файле должен быть строго соблюдён

Имя_переменной_1=значение& Имя_переменной_2=значение Учтите, что перенос строки в текстовом файле не эквивалентен переносу строки в динамическом текстовом поле. Лучше не допускать переносов строки в текстовом файле.

Создайте на жёстком диске текстовый файл 1.txt с содержимым

x1=123&x2=текст

В той же папке создайте ролик с кнопкой, которой присвойте скрипт

On (Release){

loadVariablesNum ("1.txt", 0)

}

Проиграйте ролик. Нажмите кнопку, а потом посмотрите список переменных

30. Создание предварительных загрузчиков.

Вы наверняка сталкивались с ситуацией, когда загружаемый из Internet ролик «притормаживает», или вовсе замирает на середине на некоторое время. Согласитесь, это сильно портит впечатление. Дело в том, что при загрузке на компьютер пользователя первого кадра, немедленно начинается воспроизведение ролика. Если следующие кадры не успевают загрузиться, то ролик останавливается и дожидается загрузки. Очевидно, что проблеме загрузки ролика на пользовательский компьютер следует уделить внимание. Откройте из списка примеров (Windows Samples) ролик “Keyframing”. Запустите его проигрывание (Ctrl+Enter). Разумеется, никаких остановок на экране не заметно.

В меню проигрывателя View активизируйте Bandwidth Profiler. В верхней части окна появится диаграмма, весьма полезная при анализе процесса загрузки ролика. Если в меню «View» активен пункт «Frame by frame graph», то на диаграмме отображается объём информации, который необходимо загрузить для отображения каждого из кадров.

Красная полоса на диаграмме показывает предельное значение при установленной скорости соединения. Как видно из диаграммы, Часть кадров превышает допустимый предел. Однако, следует заметить, что ролик загружается непрерывно кадр за кадром, и если «тяжёлому» кадру предшествуют ряд «лёгких», то «тяжёлый» кадр раньше начнёт загружаться и у него будет шанс успеть к тому моменту, когда до него дойдёт черёд проигрываться. Именно поэтому разработчики предусмотрели режим отображения потока, в который можно переключиться выбрав в меню «View» пункт «Streaming Graph». Теперь на диаграмме отображается динамика загрузки кадров. Как видно из предыдущей диаграммы, несколько кадров, начиная со второго имеют маленький размер, в то время как в районе 10 позиции находятся несколько «тяжёлых» кадров. Так как после загрузки второго кадра сразу начинает загружаться следующие, то в момент перехода проигрывателя от второго кадра к третьему, на компьютер успеет загрузиться уже половина четвёртого кадра. Таким образом, «тяжёлый» седьмой кадр уже начинает загружаться когда проигрываться будет лишь четвёртый. Следовательно задержек при проигрывании кадров 7-10 не будет.

Как видно из диаграммы, при проигрывании всё же будут возникать остановки в районе 1, 20 и 40 позиций. Для того что бы посмотреть динамику загрузки при другом качестве связи, установитеь другое значение скорости можно в меню «Debug». Выберите одно из стандартных значений, или введите новое, вызвав диалог командой «Debug» «Customize». В первом столбце вводится название, которое отобразится в меню, а во втором пропускная способность канала.

Установив значение 14.4 убедитесь, что задержки будут практически в каждом кадре.

Если при проигрывании ролика в меню «View» выбрать «Show Streaming» (можно просто ещё раз нажать Ctrl+Enter) то запустится процесс эмуляции загрузки ролика, и вы увидите ролик именно так как будет видеть его пользователь с указанной скоростью соединения.

Легко догадаться, что бегунок на линейке показывает проигрываемый кадр, а зелёная полоска – загруженные кадры.

Запустите процесс эмуляции загрузки при скорости 14.4. Не очень то здорово. Но это вовсе не значит, что ролик нельзя смотреть при подобной скорости. Просто в начале нужно дать ролику загрузиться. Тогда проигрывание пойдёт без проблем. В этом и есть назначение предварительных загрузчиков. Как правило, это небольшие по размеру ролики, которые проигрываются, пока не загрузится основной ролик. Простейшим решением, конечно, будет программная задержка на фиксированное время, но в этом случае страдают и пользователи с быстрым соединением. Следовательно, необходимо более адекватное поведение загрузчика.

Для прекращения работы загрузчика и запуска проигрывания основного ролика удобно использовать функцию

ifFrameLoaded (номер кадра) {

скрипт

}

Как только на компьютер пользователя загрузится кадр, указанный в аргументе функции, будет выполнен скрипт в фигурных скобках.

Как правило, предзагрузчики реализуются на отдельной сцене. Добавьте в ролик ещё одну сцену (Insert -Scene). Вызовите инспектор сцен (Window – Panels - Scene).Переименуйте новую сцену и поменяйте их порядок так, что бы она следовала первой. На сцене загрузчика создайте несложную анимацию, например, изменение цвета надписи «идёт загрузка». Для зацикливания загрузчика в последний кадр добавьте скррипт gotoAndPlay (1);

В первом кадре создайте скрипт выхода из загрузчика. Основной ролик расположен на сцене Page1 и имеет последний ключевой кадр на 70 позиции. После него уже ничего на компьютер не загружается.

ifFrameLoaded ("Page 1", 70) {

gotoAndPlay ("Page 1", 1);

}

Разумеется, можно было завершить загрузчик и раньше, например, при загрузке 60 кадра, в надежде, что уж оставшиеся 10 успеют загрузиться уже во время проигрывания ролика.

Использовать диаграмму «Streaming Graph» для оценки того, на каком именно кадре прерывать работу загрузчика бесполезно. Диаграмма не учитывает действие скрипта и отображается только для одного проигрывания загрузчика. Остаётся экспериментировать, наблюдая погоню бегунка текущего кадра за концом зелёной полоски. (довольно увлекательное занятие).

С другой стороны, то что диаграмма не учитывает скрипт можно и использовать. Если предположить что загрузчик проиграется 5 раз, то достаточно добавить в конец обычных кадров ровно столько, что бы число кадров загрузчика стало в 5 раз больше то диаграмма покажет будут ли задержки при воспроизведении.

Реально, добавленные кадры никогда проигрываться не будут. Останется только посмотреть, какой кадр загружается в момент пятого проигрывания загрузчика.

Скрипт выхода из загрузчика может быть расположен и в его последнем кадре. Это может показаться довольно необычным, так как первой идёт зацикливающая функция.

gotoAndPlay (1);

ifFrameLoaded ("Page 1", 70) {

gotoAndPlay ("Page 1", 1);

}

Однако, компилятор выполняет весь скрипт кадра и так как последней стоит команда перехода к ролику, то в нужный момент она сработает. Однако, если поменять команды местами, то загрузчик не завершится так как всегда будет срабатывать переход к его первому кадру..

ifFrameLoaded ("Page 1", 70) {

gotoAndPlay ("Page 1", 1);

}

gotoAndPlay (1);

При создании загрузчиков к большим проектам, когда пользователю приходится относительно долго ждать загрузки ролика полезно добавить индикатор загрузки.

Для вычисления процента загрузки достаточно разделить два свойства

_framesloaded – определяющее количество загруженных на данный момент кадров и

_totalframes – общее число кадров.

В данном случае речь идёт о свойстве основной линейки. Создайте в первом кадре загрузчика динамическое текстовое поле с переменной x и присвойте кадру скрипт

x=int(_framesloaded/_totalframes*100);

В данном случае отношение умножается на 100 и округляется.

Также несложно создать и графический индикатор. У нас уже есть переменная, которая изменяется от 0 до 100 в процессе загрузки. Можно связать с ней свойство какого либо клипа. Например, нарисуйте длинный горизонтальный прямоугольник. Преобразуйте его в экземпляр клипа и присвойте имя “ind”. Тогда, если первому кадру загрузчика пррисвоить скрипт

ind._xscale=x;

то прямоугольник в процессе загрузки будет растягиваться.


Поделиться с друзьями:

Состав сооружений: решетки и песколовки: Решетки – это первое устройство в схеме очистных сооружений. Они представляют...

Кормораздатчик мобильный электрифицированный: схема и процесс работы устройства...

Таксономические единицы (категории) растений: Каждая система классификации состоит из определённых соподчиненных друг другу...

История развития хранилищ для нефти: Первые склады нефти появились в XVII веке. Они представляли собой землянные ямы-амбара глубиной 4…5 м...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.036 с.