Динамическое создание Flash-анимации с помощью PHP (исходники)Источник: IBM developerWorks Россия Джек Ди Геррингтон
Web 2.0 обещает нам многофункциональные интернет-приложения. Но что это такое многофункциональное интернет-приложение? В общем оно означает Web-приложение с высокой степенью интерактивности, а именно, с использованием виджетов, Web-форм и отчетов, содержимое которых мгновенно обновляется без запроса новой страницы с сервера. Один из способов построения многофункциональных интернет-приложений (Rich Internet Applications - RIAs) - это использование динамического HTML (DHTML), который является комбинацией Ajax, JavaScript, каскадных листов стилей (CSS) и HTML. Но DHTML - не единственный способ добавления интерактивности в Web-приложения. Еще одним крупным игроком в этой области является Adobe Flash Player, который уже более десяти лет повышает интерактивность Web-сайтов. Если первая версия Flash была инструментом для создания анимированных изображений, то новые версии могут поддерживать весь интерфейс в целом, обеспечивая управление доступом к Web-сервисам и полную поддержку сценариев при помощи ECMAScript (официальная версия JavaScript). Основы FlashПрограмма Flash Player - это плагин, интегрируемый в Web-браузер на компьютерах с операционными системами Microsoft® Windows®, Mac OS X или Linux. На момент написания статьи последней версией Flash Player являлась версия V8. Она распространяется бесплатно и входит в поставку большинства браузеров. Эта программа очень популярна и имеет огромное число пользователей. Эта популярность только усилилась с появлением таких сервисов, как YouTube и Google Video, которые используют Flash для воспроизведения видеопотоков. Но Flash Player - это только одна часть уравнения. Для работы ему необходима Flash-анимация. Такая анимация - это чаще всего файл с расширением .swf, скомпилированный с помощью одного из инструментов разработки Flash. Но мы покажем в этой статье, что с помощью библиотеки Ming вы можете динамически создавать .swf-файлы почти также, как вы динамически создаете рисунки для построения диаграмм на своем Web-сервере. Библиотека Ming создает коды операций в новом .swf-файле из объектов и методов, которые вы написали в PHP-коде. Вы можете посмотреть .swf-файл с Web-сайта любым из двух способов. Первый - просто следовать по ссылке .swf-файла. При этом вся область контента Web-сервера заменяется на Flash-анимацию. Этот метод удобен для отладки, но основной способ заключается в том, чтобы поместить анимацию в тег На листинге 1 показан пример тега Листинг 1. Встроенная Flash-анимация
Этот набор тегов ссылается на файл с анимацией lines.swf. Внутренний тег Эти теги также указывают высоту и ширину окна проигрывателя Flash Player - 550 и 400 пикселей соответственно. Важно отметить, что графика во Flash-анимации векторная. Это значит, что при использовании Flash-команд для рисования линий и текста, соответствующие элементы хранятся как координаты и масштабируются в соответствии с размером окна проигрывателя. Во Flash-анимации своя собственная система координат, которую вы можете использовать по своему усмотрению для оптимизации кода. MingПервый метод использования Flash-анимаций, представленный в этой статье, заключается в динамическом создании анимаций с помощью библиотеки Ming. Библиотека Ming - это PHP-библиотека с набором объектов, которые соответствуют типам данных в SWF-анимации: спрайты (sprites), формы, текст, растровые рисунки и т.д. Я не буду рассказывать в этой статье, как собирать и инсталлировать Ming, потому что этот процесс не является простым и зависит от платформы. Для работы с этой статьей я использовал предварительно скомпилированное расширение библиотеки php_ming.dll для Windows-версии PHP. Надо отметить, что Ming до сих пор находится в стадии разработки. На момент написания статьи текущая версия библиотеки - V0.4, и некоторые команды из ранних версий не работают в более поздних версиях. В данной статье я использовал версию V0.4, поэтому вам понадобится та же версия, чтобы использовать этот код. В листинге 2 показан пример программы HelloWorld, реализованный с использованием библиотеки Ming.
Запустив этот код из командной строки, вы получите файл hello.swf. Я открываю этот файл в своем Web-браузере и вижу результат (см. рисунок 1). Рисунок 1. Пример HelloWorld с использованием Ming
Возвращаясь к коду, первое, что я делаю - создаю указатель на встроенные шрифты (_sans), затем я создаю текстовое поле, устанавливаю его шрифт, цвет и размер, а также задаю его значение ("Hello World"). Потом я создаю объект В качестве альтернативы непосредственному созданию файла можно выводить результирующую SWF-анимацию как страницу, используя вместо метода save данный код:
Этот процесс похож на создание растровых рисунков с использованием библиотеки ImageMagick в рамках PHP. Я буду использовать метод save для всех примеров с Ming, однако вы можете делать, как вам удобнее. Заставим текст двигатьсяПросто помещать текст во Flash-анимацию бессмысленно, лучше заставить его двигаться. Для этого я объединю пример из листинга 2, который состоит из двух частей: первый текст из маленького становится больше и больше, а второй остается статичным.
Запуск этого кода из командной строки создает файл text.swf. Я открываю этот файл в своем Web-браузере и вижу результат (см. рисунок 2).
Сначала текст "1000" довольно маленький - 350 точек. Затем я использую метод Чтобы понять, почему это работает, вам надо немного узнать о том, как Flash осуществляет анимацию. Анимация во Flash работает также как и в кино: с помощью кадров. Графические спрайты изменяют свое положение от кадра к кадру. Одно ключевое различие в том, что Flash не делает моментальный снимок каждого кадра. Он хранит состояние каждого объекта-спрайта для каждого кадра. Если вы заметили, у меня есть одна переменная, Нарисуем картинкуСледующая вещь, которой мы будем заниматься, - это векторная графика. Начнем с простой линии, которая будет проходить от верхнего левого угла к нижнему правому углу кадра.
Я запускаю этот сценарий из командной строки, смотрю на полученный .swf-файл и вижу изображение как на рисунке 3. Рисунок 3. Рисование простой линии
Довольно просто и не очень интересно. Что же я сделал? Я создал новый объект Чтобы стало интереснее, я использую тот же тип кадровой анимации, как с текстом. Но в этом случае я буду вращать линию вокруг центра анимации с помощью кода, показанного ниже.
В данном случае я рисую линию от точки с координатами -100, -100 до 100, 100, так чтобы центр линии был расположен в точке 0,0. Таким образом, когда я вращаю форму, вращение происходит вокруг центра линии. Добавляя форму к анимации, я двигаю объект Использование рисунковТекст и основные векторные примитивы, такие, как линии, окружности, дуги, кривые и прямоугольники - это все замечательно, однако хорошо бы иметь доступ к изображениям нашей Flash-анимации. К счастью, библиотека Ming упрощает использование изображений, как вы можете видеть: Листинг 6. Использование изображения
Я запускаю этот сценарий из командной строки, смотрю на полученный .swf-файл и вижу изображение как на рисунке 4. Рисунок 4. Анимация с изображением
Этот сценарий начинает работу с чтения локального .jpeg-файла (в данном случае фотография моей дочери Меган). Потом он создает прямоугольную форму и заполняет ее изображением. После этого на протяжении десяти кадров он применяет эффект наклона (skew), чтобы рисунок немного двигался. Двигаемся дальшеЯ лишь слегка коснулся того, что можно сделать с помощью библиотеки Ming. Один из аспектов, который я не упомянул в данной статье, - это интерактивная часть, где вы можете прикреплять простые сценарии к элементам. (Однако если вы задумали сложную Flash-анимацию и встает вопрос реализации интерактивности, то вам стоит задуматься об использовании Flash-инструментария для разработки анимации, которая сможет общаться с Web-сервисами в рамках вашего Web-приложения). Еще одной опцией, о которой надо вспомнить, когда вы будете создавать более сложную Flash-анимацию, является использование авторских инструментов таких, как Adobe Flex или Laszlo. Оба инструмента поддерживают синтаксис XML для отображения пользовательского интерфейса Flash-анимации и предоставляют возможность простого создания сценариев JavaScript, которые обеспечат интерактивность интерфейса. XML Chart и XML GaugeЯ был впечатлен еще двумя программами Flash SWF: XML Chart и XML Gauge, которые можно найти на сайте maani.us. Анимация упрощает поддержку динамических шкал и диаграмм на Web-сайте, просто создавая XML-страницы в PHP-приложении. Сначала загрузите SWF-файл с сайта. Затем добавьте тег ЗаключениеFlash дает возможность простым способом значительно повысить интерактивность Web-приложения. Начните с чего-нибудь маленького, например, с элементов управления типа виджета, которые недавно стали популярными. С программами XML Chart и XML Gauge вы можете опробовать такие типы Flash-виждетов до того, как потратите кучу времени на изучение Ming, Flex или Laszlo. Как бы то ни было, вам обязательно пригодится понимание возможностей Flash для повышения интерактивности PHP-приложений в Web 2.0. |