Оцените мой сайт
1. Отлично
2. Хорошо
3. Неплохо
4. Плохо
5. Ужасно
Всего ответов: 37
Главная » Статьи » Статьи о флеш

“Снегопад”

Допустим перед нами стоит задача реализовать определенный групповой эффект, тоесть эффект который получается при определенном движении или изменении группы частиц. Решить данную задачу можно двумя основными способами: реализовать анимацию в мувиклипах а затем разместить их на сцене или же запрограммировать их поведение. В конечном итоге все конечно определяет сложность задачи, ведь невсегда необходимо делать "слона из мухи", но при этом важно понимать те выгоды которые нам дает ООП. А выгоды эти достаточно очевидны: управляемость, легкая модифицируемость, реализация случайности (что немаловажно для создания более реалистичных эффектов). Но для всего этого требуется только уметь применить мощь ООП, вооружившись системным подходом.

Пусть мы хотим реализовать снегопад. Начинаем анализировать поставленную задачу: во-первых снегопад представляет собой падение снежинок на землю, следовательно мы выделяем две основные сущности "снегопад" и "снежинка". Рассмотрим для начала снежинку. Она представляет собой определенную частицу, имеет внешний вид, падает с определенной скоростью по определенной траектории, может вращаться – таким образом мы определили основные ее характеристики. Сущности снегопад скорее всего будет управлять набором снежинок.

Мы описали общее направление решения задачи, так что теперь можем приступить к классовой реализации задуманного в AS2(ActionScript 2).

Создание проекта

Создаем проект в Flash MX 2004 (New/Flash Project) и сохраняем желательно в отдельную папку, например как "snowfall.flp". Проекты – очень полезное нововведение, позволяющее собирать все необходимые файлы, а также выполнять контроль версий над ними, рекомендую их использовать всегда. Для просмотра дерева проекта и выполнения действий над ним служит панель Project (Window/Project или Shift-F8).

Создаем флеш приложение (New/Flash Document) и сохраняем его желательно в папку где сохранен наш проект, например как "snowfall.fla". Теперь добавим к проекту наш документ, выполнив пункт "Add File..." функциональной кнопки или всплывающего меню на панели Project.

Теперь приступаем к реализации класса для снежинки. Создаем скрипт-файл (New/ActionScript File) и сохраняем его как "SnowFlake.as" рядом с файлом флеш документа, последднее особо важно для создания обьекта этого класса в приложении без лишних трудностей. Дело в том что спецификация AS2 предусматривает хранение классов только в отдельных as-файлах с именами совпадающими с именами классов и расположение их либо по глобальным адрессам (системная папка ...\Macromedia\Flash MX2004\<language>\Configuration\ или рядом с флеш документом), либо в папках лежащих рядом с флеш докуметом, что в свою очередь требует правильного импортирования классов из них. Так что желательно сохранять все файлы относящиеяс к одному проекту в одной папке, что заведомо убирает многие трудности. Для тех кто хочет детально разобраться в этом вопросе посвещена глава документации ActionScript Reference Guide/Creating Classes with ActionScript 2/ Understanding the classpath.

Класс снежинки

Открываем в редакторе Flash MX 2004 файл "SnowFlake.as" и создаем в нем заготовку нашего класса SnowFlake:


// класс снежинки
class SnowFlake{
// конструктор класса вызываеться при создании екземпляра
function SnowFlake(){
// выводим сообщение при создании екземпляра класса
trace("Class created!");
}
}

Проверим как работает наш класс, для этого открываем флеш документ "SnowFlake.fla", добавляем слой "_actions" и прописываем в первом кадре следующее:


// обьявляем переменную sf типа SnowFlake и создаем екземпляр класса SnowFlake
// при этом импортирование класса SnowFlake происходит неявно
// так как он находиться рядом с флеш документом

var sf:SnowFlake = new SnowFlake();

Если все было сделано правильно в Output окне должна появиться запись "Class created!”. Теперь, так как мы уже разобрались как создавать классы уверенно можем описать все ее параметры и поведение.

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


// класс снежинки
class SnowFlake extends MovieClip{
// конструктор класса вызываеться при создании екземпляра
function SnowFlake(){
// выводим сообщение при создании екземпляра класса
trace("Class created!");
}
}

Теперь мы фактически имеем свой класс мувиклипа, который можем модифицировать по своему усмотрению, этим и займемся:


// класс снежинки
class SnowFlake extends MovieClip{

// x ось колебания
var x:Number = 100;
// скорость ветра
var wind:Number = 0;
// скорость падения
var speed:Number = 1;
// амплитуда раскачивания
var amplitude:Number = 10;
// частота раскачивания
var rate:Number = Math.PI/24;
// пределы окна
var clipBounds:Object;

// конструктор класса вызываеться при создании екземпляра
function SnowFlake(){
// выводим сообщение при создании екземпляра класса
trace("Class created!");

// получаем пределы окна
clipBounds = _root.getBounds(_parent);

// устанавливаем начальные координаты случайным образом
_x = x = random(clipBounds.xMax);
_y = random(clipBounds.yMax);
}

// пегружаем функцию MovieClip.onEnterFrame
function onEnterFrame(){
// поворачивание при движении
_rotation = _x * rate * 8;

// смещение от ветра
x += wind;

// движение по синусоиде вдоль оси x
_x = x + amplitude * Math.sin(_y * rate);

// проверка окончания падения
if(_y > clipBounds.yMax){
// начинаем падение заново
_x = x = random(clipBounds.xMax)
_y = -_height;
}else{
// продолжаем падение
_y += speed;
}
}
}

Нам надо увидеть что же у нас получилось. Для этого создаем в библиотеке флеш документа новый однокадровый мувиклип "SnowFlake" и рисуем в первом кадре то какой мы представляем себе снежинку. После этого выделим в библиотеке клип нашей снежинки и выберем из контексного меню пункт "Linkage". В открывшемся окне отметим пункт "Export for ActionScript", что позволит нам ввести имя идентификатора ресурса для данного клипа (Identifier - "SnowFlake") и класс ассоциированный с ним (AS 2.0 class:  "SnowFlake"). Последнее мы можем без размышлений делать так как наш класс потомок MovieClip. Следует отметить, что теперь наш класс будет автоматически создаваться при создании библиотечного мувиклипа "SnowFlake", так как он фактически им и являеться




Рис 1. Связывание клипа с классом


Теперь можем просто перетянуть из библиотеки наш мувиклип снежинки на сцену и выполнить Test Movie (Ctrl-Enter). В результате мы должны увидеть ее вполне независимую жизнь.

Класс снегопада

Все что нам теперь осталось сделать - это создать группу снежинок. Для этого создадим файл "SnowFall.as", добавим его к нашему проекту и опишем в нем класс, который позволит нам создавать необходимое количество снежинок на определенном мувиклипе и иметь управление над ними:


// класс снегопада
class SnowFall{

// массив снежинок с инициализацией
var snowflakes:Array = new Array();

// конструктор
// parent - обьект где надо создать группу
// count - количество снежинок
function SnowFall(parent:Object, count:Number){
// создаем группу снежинок из библиотеки и помещаем в массив
for(var i=0;i< count;i++){
parent.attachMovie("ShowFlake", "snowflake_"+i, i);
snowflakes.push(eval(parent._target + "snowflake_"+i));
}
}

// функция останавливающая падение снежинок
function stop(){
for (var i in snowflakes){
snowflakes[i].speed = 0;
}
}

// запускаем падение снежинок
function play(){
for (var i in snowflakes){
snowflakes[i].speed = 1;
}
}
}

Реализация

Напишем в первом фрейме сцены флеш документа следующий код для создания класса снегопада и простого управления им:


// создаем снегопад на _root с количеством снежинок равным 10
var sf:SnowFall = new SnowFall(_root, 10);

// функция срабатывающая при отжатии клавиши мыши на _root
onMouseUp = function(){
// логических флаг
onOff = !onOff;

// останавливаем или запускаем снегопад
if(onOff){
sf.stop();
}else{
sf.play();
}
}

Теперь мы имеем полноценный снегопад, который при нажатии на клавишу мыши поочередно останавливаеться или продолжаеться




Рис 2. Программная аннимация снегопада

Как видим построенные два класса довольно просты для понимания, и что очень важно легки для расширения, в том числе и для применения в других эффектах: листопад, звезды и др. Можно легко изменить траекторию падения, заменив функцию движения в классе SnowFlake, добавить некоторые эффекты, например: синхронное увеличение и уменьшение, изменение цвета. В классе SnowFall можно добавить функцию для случайного изменения ветра - вообщем все что будет оживлять наш флеш эффект.

Категория: Статьи о флеш | Добавил: Falanga (13.12.2009)
Просмотров: 1447 | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Воскресенье
12.05.2024
21:06


Логин:
Пароль:
Текст/Код

Онлайн всего: 1
Гостей: 1
Пользователей: 0
200


Хостинг от uCoz