выпуск 20
Flash на практике часть-1
До меня дошли слухи, что мне давно пора бы,
закрыть свой "каучуковый завод" и научить страждущих конкретному применению
ActionScript, да и самого Flash в работе. :-)
Этот выпуск открывает новую серию, посвященную
практическому использованию Flash при создании собственного сайта. Это не
означает, что мы будем топтаться на месте и станем применять, только уже
известные нам приемы и команды. Наоборот, мы продолжим изучение ActionScript
на примерах, которые Вы сможете, включить в своих работы.
От чего больше всего устают во время работы? Нет!
Не от самой работы :-) От однотипных и монотонных действий.
Компьютер не человек и мы не услышим, как он
жалуется на свою судьбу, выполняя длиннющие скрипты одинаковых действий,
но давайте создадим "комфортные" условия труда для этой трудолюбивой железки
и впоследствии, нам самим будет проще вносить изменения в проекты. Если
необходимо выполнить определенные одинаковые действия с большим количеством
объектов, то нет необходимости записывать их отдельно для каждого объекта,
достаточно применить цикл.
Цикл - Loop While
Команда Loop While выполняет последовательность
входящих в нее действий, только в случае, если заданное для проверки условие
верно.
Рассмотрим конкретный пример:
Set Variable: "cikl" = 0
Loop While (cikl < 5)
Set Variable: "cikl" = cikl + 1
End Loop
В результате, увеличение переменной "cikl" будет
продолжаться до тех пор, пока ее значение меньше 5. Когда нам необходимо
выполнить ряд однотипных операций, данное действие просто незаменимо, еще
одним его преимуществом является скорость выполнения, она не зависит от
установленного значения Frame Rate (скорость показа фильма задается в
Modify/Movie) в интернет обычно говорят - "значение FPS".
Давайте научимся использовать циклы в своей работе.
Предположим, что в вашем фильме должна быть сцена со звездным небом. Применив
простейший цикл с изученным в 19 выпуске, дублированием, Вы можете расположить
случайным образом, необходимое количество звездочек на небосводе, и самое
замечательное, что каждый раз созвездия будут другими. Кроме того, значительно
сократится объем самого фильма, а для интернета это имеет очень большое значение.
Нам понадобится символ звездочки на сцене и всего
один кадр. Я не стану приводить полный код скрипта (что может быть приятнее,
чем самостоятельно написанная программа?), а только дам несколько рекомендаций:
Перед циклом задайте начальное значение счетчика,
которое впоследствии, Вы сможете использовать для создания новых имен символов
при дублировании, указании необходимого уровня размещения (помните про
стремление к наибольшей оптимизации скрипта).
Для случайного определения положения звезды
применяйте "Random"
Чтобы придать звездному небу более реальный вид
добавьте установку прозрачности "Alpha"
Не забудьте изменять значение счетчика, иначе Ваш
цикл никогда не будет завершен и фильм просто остановиться.
Пример реализации данного сценария доступен в разделе "Скачать"
Рассмотрим реальную ситуацию: Вы в поле лица
трудились, аж целых два дня, создавали свой шедевр, который, несомненно,
заставит ваших конкурентов лопнуть от зависти, импортировали все красивые
картинки, которые были в наличии и ко всей этой радости записали голосовой
комментарий. Получилось несколько тяжеловато (мегобайта 2-3), ну да это ерунда,
зато круто! Закачали свое чудо на любимый сайт и решили посмотреть, как все это
"идет"… а "идет" плохо, кадры загружаются рывками, прорисовка странная и голос
обрывается, но самое досадное, куда-то пропала вся крутость.
Я сейчас не буду рассуждать о целесообразности
импортированной графики или советовать использовать потоковый звук, все это
будет позже.
Реально оценить, как будет загружаться Ваш фильм,
можно и без подключения в интернет.
Тестирование скорости загрузки:
Во время обычного тестового просмотра
Control/Test Movie откройте меню "Control", установите скорость загрузки,
например - 14,4 (1,2 Kb/s) и выберите Show Streaming. Фильм начнет
проигрываться с самого начала и эмулировать загрузку с выбранной скоростью.
Вы можете получить множество полезной информации о времени загрузки кадров,
их объеме, если включите окно информации - View/Bandwidth Profiler.
Вы, несомненно, не раз видели сайты, на которых
процесс загрузки сопровождается выводом информации о загруженном объеме. Это
так называемые предзагрузчики. Они просто незаменимы при размещении своих
работ в интернет. Имеет смысл использовать предзагрузчики во всех
случаях, когда объем swf файла более 10-15 кб.
Предзагрузчик:
Какие данные нам нужны для определения загруженного
объема фильма? Разумеется, мы должны знать, сколько кадров всего в фильме.
Можно указать это вручную, но ведь мы хотим создать универсальный загрузчик,
который будет работать независимо от того в каком проекте, мы станем его
использовать, в этом нам поможет параметр "_totalframes". А еще нам нужно
знать, сколько кадров загружено на данный момент "_framesloaded". Этих двух
параметров достаточно для вычисления загрузки в процентах, как это принято в
интернет.
Загрузчик должен состоять, хотя бы из двух кадров,
в первом будет вычисляться необходимое нам значение, а во втором производиться
проверка на полную загрузку, и если фильм загружен начать его показ.
В первом кадре вставим следующий скрипт:
Set Variable: "load" = Int ( _framesloaded / _totalframes * 100)
Т.е. присваиваем переменной "load" значение загруженного фильма в процентах.
Для этого разделим количество уже загруженных кадров на их общее количество и
умножим на сто. Но, полученное значение желательно округлить (не будем же мы
утомлять зрителя докладами о тысячных процентах загрузки :), для округления
служит функция "Int", которая просто отбрасывает все цифры после запятой.
Во втором кадре поместим проверку и вывод информации:
Set Variable: "showtext" = load & "%"
If (load < 100)
Go to and Play (1)
End If
В первой строке выводится информация о загрузки в процентах, для этого
необходимо, что бы на сцене было текстовое поле с именем "showtext". Далее идет
проверка на полную загрузку и если загружено менее 100% то переходим на первый
кадр, для получения нового значения.
Это типичный вариант предзагрузчика, но далеко не
единственный. Если проект более 500 Кб, то смотреть на медленно ползущие
проценты, не доставит большого эстетического удовольствия. В этом случае,
гораздо привлекательнее использование пошаговой загрузки, т.е проверить
загруженность первой, небольшой части фильма, начать его показ и пока идет
проигрывание данной сцены броузер продолжит загрузку, по окончании сцены
проверяется загрузка следующей, если еще не загружено, то попросить подождать.
В этом случае необходимо рассчитать возможное время загрузки и проигрывания
сцен. Для реальной проверки, используйте тестирование с разными значениями
скорости загрузки. Для пошагового предзагрузчика, конечно можно использовать
описанный выше метод вычисления загрузки, но эффективнее, особенно если у Вас
фильм состоит из нескольких сцен, делать проверку на загрузку определенного
(конечного) кадра.
Проверка загруженного кадра - If Frame Is Loaded (FrameNumber)
Это уже знакомый Вам условный оператор "If", но в
данном случае в качестве условия проверки, служит указание конкретного кадра
"FrameNumber". Рассмотрим его параметры:
Выпадающее меню "Scene" - сцена в которой мы будем
делать проверку, по умолчанию стоит значение <current scene> - текущая сцена,
т.е. если у Вас весь фильм состоит из одной сцены то значение менять
необязательно.
Frame - здесь мы указываем номер конкретного кадра, имя метки кадра
"Label" (что, разумеется удобнее) или, если выберем вариант "Expression",
вычисляемое условие (применяется при создании проектов построенных по
модульному принципу). В рабочем виде данный условный оператор, может выглядеть
следующим образом:
If Frame Is Loaded (Scene 2, "end")
Go to and Play (Scene 2, "start")
End Frame Loaded
Go to and Play (25)
Предположим, данный скрипт находится на сцене
"Scene 1" в конечном, 30-ом кадре. После того, как закончится проигрывание
первого эпизода, т.е. фильм дойдет до 30-го кадра первой сцены, произойдет
проверка - "а не загрузилась ли вторая сцена?". Если нет, то фильм перейдет
на 25-й кадр текущей сцены и после того, как условие станет истинным, т.е.
вторая сцена будет загружена, произойдет ее запуск.
Пошаговые загрузчики, можно применять, как
для маленьких проектов. Например, Вы создали меню для сайта и хотите, чтобы
зритель не видел, как оно прорисовывается, а появлялась уже нарисованная
картинка. Так и для очень больших проектов, каждая часть которых длится долго
сама по себе (презентации, мультфильмы и т.д.) и возможна загрузка следующей
сцены во время проигрывания текущей.
Домашнее задание:
Как обычно будем придерживаться темы текущего
номера. На этот раз мы изучили предзагрузчики. Кроме вывода процентной
информации, обычно предзагрузчик содержит небольшой клип оживляющий время
ожидания.
Ваша задача создать заставку для предзагрузчика.
Основные требования: небольшой объем, оригинальный подход (песочные часы,
термометры и летящие в папку бумажки не принимаются), возможна привязка к
загруженному объему.
Итоги домашнего задания 18-го выпуска:
Количество присланных насекомых было не так уж
велико. Видимо рекламируемые средства борьбы с этими мерзкими тараканами,
все-таки действуют и в виртуальном мире.
В качестве победителей, позвольте представить Егорова Сергея, сыграв в
присланную им игру, Вы почувствуете все прелести тяжелой жизни воздухоплавателя.
Нелегкая судьба путешественника, забросила Александра Соколова в непроходимые
джунгли, а Андрей Гусаров прислал историю жизни его любимого таракана.
Несколько задержался Максим Чубин, но его
пейджинговая станция заслуживает, того чтобы Вы на ЭТО посмотрели... надеюсь,
среди читателей рассылки большинство пересекли рубеж совершеннолетия.
... Да! И не забудьте мне напомнить, поставить в компьютер новый "Комбат" :-)
Павел Г.Лапин
E-mail: murmik@mail.ru
Россия Мурманск
|