В данной работе мы научимся создавать снегопад. Для решения этой задачи есть два способа:
1) создать мувик со снежинкой, дать ей имя и в кадре написать нужный код.
2) воспользоваться классовой реализацией задуманного в ActionScript 2 (создать 2 класса: снежинка и снегопад).
Конечно, на первый взгляд, 1-й вариант выглядит проще, но 2-й гораздо удобнее, и мы научимся создавать классы в AS2.
1. Создаём новый проект и сохраняем в отдельную папку, например, как snowfall.flp. Для просмотра дерева проекта и выполнения действий над ним служит панель Project (Window/Project или Shift-F8).
2. Создаём флеш-приложение (New/Flash Document) и сохраняем его в папку, где сохранён наш проект, например, как snowfall.fla. Теперь добавим к проекту наш документ, выполнив пункт Add File... функциональной кнопки или всплывающего меню на панели Project.
3. Теперь приступаем к реализации класса для снежинки. Создаём скрипт-файл (New/ActionScript File) и сохраняем его как SnowFlake.as. Сохраняем все файлы, относящиеся к одному проекту, в одной папке! Пишем в файле SnowFlake.as следующий код:
// класс снежинки
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);
// Установим максимальные границы окна
clipBounds.xMax=550;
clipBounds.yMax=400;
// Установим начальные координаты случайным образом
_x = x = random(clipBounds.xMax);
_y = random(clipBounds.yMax);
// Размер и прозрачность снежинки
_height = random(40);
_width = _height;
_alpha = random(70);
}
// Погружаем функцию 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;
}
}
}
4. В файле Snowflake.fla создаём новый однокадровый мувик и рисуем снежинку. Выделим в библиотеке клип снежинки и выберем из контекстного меню пункт Linkage. В открывшемся окне (рис. 4.21) отметим пункт Export for ActionScript, что позволит нам ввести имя идентификатора ресурса для данного клипа (Identifier − "SnowFlake") и класс, ассоциированный с ним (AS 2.0 class: "SnowFlake").
Рис. 4.21. Связывание клипа с классом
5. Cоздаём файл 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("SnowFlake", "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;
}
}
}
6. В Snowflake.fla добавляем слой "actions" и прописываем в первом кадре следующее:
// Объявляем переменную sf типа SnowFlake и создаём экземпляр класса SnowFlake
var sf:SnowFlake = new SnowFlake();
// Создаём снегопад на _root с количеством снежинок, равным 10
var sf:SnowFall = new SnowFall(_root, 100);
// Функция, срабатывающая при отжатии клавиши мыши на _root
onMouseUp = function(){
// логический флаг
onOff = !onOff;
// Останавливаем или запускаем снегопад
if(onOff){
sf.stop();
}else{
sf.play();
}
}
Теперь мы имеем полноценный снегопад, который при нажатии на клавишу мыши поочередно останавливается или продолжается.