Недавно возникла необходимость создать flash анимацию плывущих по небу облаков, после ее решения возникла идея поделиться способом ее реализации. Итак приступим!
Первым делом считываем XML файл, который содержит список облаков
с необходимыми параметрами для анимации, затем с помощью TextField
и тега img загрузим облака и применим tween анимацию из библиотеки greensock.
Название пакета определяет местоположение его файлов относительно flash документа. Также название самого .as файла должно быть точно таким-же как название класса. В моем примере файловая структура выгляди так:
cloud.as
Теперь необходимо создать XML файл с нашими облаками
cloud.xml
Photoshop
Рисуем облака в Photoshop и экспортируем их в png формате с прозрачным фоном. Для решения этой задачи понадобятся кисти облаков и небольшая фантазия. Подробно этот процесс описывать не буду, на просторах интернета полно уроков по фотошопу, суть в следующем, скачиваем и устанавливаем кисти, рисуем облако, обрезаем лишнее и экспортируем его в png. Повторяем эту операцию для всех облаков, которые планируется запустить по небу. Облака рисуйте разные и по фактуре и по размеру.Flash и AS 3.0.
Сначала коротко о том как это все будет работать.Первым делом считываем XML файл, который содержит список облаков
с необходимыми параметрами для анимации, затем с помощью TextField
и тега img загрузим облака и применим tween анимацию из библиотеки greensock.
Как подключить Document Class в AS 3.0
Хотел сослаться на готовый пример как подключить Document Class но под руку на русском не попалось ничего путного, опишу своими словами. Прежде всего, все свои наработки с ActionScript лучше всего оформлять в виде классов, заключать их в пакеты и сохранять в виде отельных файлов. При таком подходе будет всегда удобно подключить нужный пакет к проекту и воспользоваться своими или чужими классами не изобретая каждый раз велосипед методом копи паст.Название пакета определяет местоположение его файлов относительно flash документа. Также название самого .as файла должно быть точно таким-же как название класса. В моем примере файловая структура выгляди так:
\com\cloud\cloud.asТеперь в созданном флеш-документе (File->New->Flash File (ActionScript 3.0) измените параметры Frame Rate: 36 fps, определите нужный размер документа и задайте небесный цвет фона. Теперь в поле Document Class нужно указать тот класс, конструктор которого должен выполняться при запуске ролика. В моем случае это com.cloud.cloud и если все указано верно, то при нажатии кнопки Edit Class Definition откроется .as файл с нужным классом.
cloud.as
package com.cloud { import flash.text.*; import flash.display.*; import flash.events.*; import flash.net.*; import com.greensock.*; import com.greensock.easing.*; public class cloud extends Sprite { /*Значение по умолчанию для файла с облаками*/ private var XML_PATH:String = 'cloud.xml'; private var xml:XML; private var urlLoader:URLLoader; /*Конструктор*/ public function cloud() { /* Передаем путь к файлу через параметр. Чтобы исключить кеширование к пути следует добавить случайный параметр в javascript коде, который запускает flash */ if (root.loaderInfo.parameters.xmlpath != null) { XML_PATH = root.loaderInfo.parameters.xmlpath; } /*Создаем загрузчик*/ urlLoader = new URLLoader(); /*Загружаем XML файл*/ urlLoader.load(new URLRequest(XML_PATH)); /*На событие окончания загрузки файла вешаем функцию loadXML*/ urlLoader.addEventListener(Event.COMPLETE, loadXML); } /*Функция, которая вызывается после загрузки XML файла*/ private function loadXML(e:Event):void { /*Получим данные об облаках из XML-файла*/ xml = new XML(e.target.data); /*Облака вперед!*/ moveCloud(); } /* Функция движения облаков Для наглядности все параметры, считываемые из XML-файла поместим в переменные */ private function moveCloud(){ var mc:MovieClip = null; var sec:Number = 0; var w:int = 0; var h:int = 0; var shifty:int = 0; var effect:String = null; var src:String = null; /*Запускаем цикл по всем облакам*/ for (var i:int = 0; i < xml.clouds.cloud.length(); i++) { /*Длительность полета*/ sec = xml.clouds.cloud[i].@sec; /*Ширина картинки с облаком*/ w = xml.clouds.cloud[i].@width; /*Высота картинки с облаком*/ h = xml.clouds.cloud[i].@height; /*Эффект ease*/ effect = xml.clouds.cloud[i].@effect; /*Сама картинка с облаком*/ src = xml.clouds.cloud[i]; /*Создаем MovieClip*/ mc = addCloud(src,w,h); /*Запускаем облако. Подробно об этой функции читаем на сайте разработчиков*/ TweenMax.to(mc, sec, {x:stage.stageWidth, ease:EaseLookup.find(effect), repeat:-1, startAt:{x:-w}}); } } /* Функция, создающая облако src - Код для картинки с облаком в формате <img src='ссылка_на_картинку'> w - Ширина картинки с облаком h - Высота картинки с облаком */ private function addCloud(src:String,w,h):MovieClip { /*Создаем текстовое поле*/ var txt:TextField = new TextField(); txt.multiline = false; txt.wordWrap = true; /*Загрузим картинку*/ txt.htmlText = src; txt.width = w; txt.height = h; /*Положим текстовое поле в MovieClip*/ var mc:MovieClip = new MovieClip(); mc.addChild(txt); /*Добавим клип на сцену*/ addChild(mc); /*Начальное положение клипа с облаком*/ mc.y = Math.random() * ( stage.stageHeight - h); mc.x = -w; /* Определяет способ наложения объекта с облаком, Использование этого параметра наргужает CPU но облака так выглядят лучше */ mc.blendMode = "screen"; return mc; } } }
Теперь необходимо создать XML файл с нашими облаками
cloud.xml
<?xml version="1.0" encoding="UTF-8"?> <IMAGES> <clouds> <cloud width="337" height="188" sec="20" effect="Quad.easeInOut"> <![CDATA[<img src='cloud_000.png'>]]> </cloud> </clouds> <clouds> <cloud width="460" height="246" sec="30" effect="Sine.easeInOut"> <![CDATA[<img src='cloud_001.png'>]]> </cloud> <cloud width="150" height="150" sec="11" effect="Sine.easeOut"> <![CDATA[<img src='cloud_003.png'>]]> </cloud> <cloud width="150" height="150" sec="10" effect="Circ.easeOut"> <![CDATA[<img src='cloud_004.png'>]]> </cloud> </clouds> </IMAGES>
Комментариев нет:
Отправить комментарий