Повсюду была холодная зима, так что давайте узнаем этот факт по хорошей зимней сцене. В этом уроке мы создадим эффект падающего снега, используя Flash и ActionScript 3.0.
Конечный результат
Давайте кратко рассмотрим конечный эффект:
Шаг 1: Краткий обзор
Используя изображение в качестве фона, мы создадим эффект падающего снега. Снег будет пользовательским MovieClip, который будет экспортироваться для использования в качестве класса. Мы дублируем и анимируем этот клип с AS3.
Шаг 2: настройка
Откройте Flash и создайте новый файл Flash (ActionScript 3.0).
Установите размер сцены 500 х 375 пикселей и установите частоту кадров 24 кадра в секунду.
Шаг 3: Получение фона
Для этого эффекта потребуется снежная сцена.
Вы можете создать свой собственный или адаптировать собственный фон. В этом примере я использовал фотографию Энди Армстронга , которая имеет лицензию Creative Commons.
Шаг 4: Импорт изображения
Когда вы закончите выбирать фон, вернитесь во Flash, нажмите « Файл»> «Импорт»> «Импортировать в рабочую область» и выберите загруженное изображение.
Поместите изображение в центр сцены и перейдите к следующему шагу.
Шаг 5: Создай свою Снежинку
MovieClip будет использоваться в качестве снежинки, я использовал этот базовый растровый рисунок снежинки:
Преобразуйте растровое изображение в мувиклип, установите флажок « Экспорт для ActionScript» и назовите его « Снежинка» .
Кроме того, вы можете создать новый мувиклип под названием « Снежинка» и просто нарисовать внутри него круг с градиентной заливкой, чтобы он выглядел мягким и круглым.
Шаг 6: Создайте свой класс документов
Создайте новый документ ActionScript и сохраните его как Snow.as.
Шаг 7: Запустите свой код
Ключевое слово package позволяет вам организовать ваш код в группы, которые могут быть импортированы другими скриптами; Рекомендуется именовать их, начиная со строчной буквы, и использовать интеркапс для последующих слов, например: myClasses .
Если вы не хотите группировать свои файлы в пакет или у вас есть только один класс, вы можете использовать его прямо из исходной папки, но идея здесь в том, чтобы организовать.
1
2
|
package
{
|
Шаг 8: Импортируйте необходимые классы
Это обязательные классы, для более подробного описания каждого класса, пожалуйста, обратитесь к справке Flash (нажмите F1 в Flash).
1
2
3
4
|
import flash.display.MovieClip;
import flash.events.Event;
import flash.utils.Timer;
import flash.events.TimerEvent;
|
Шаг 9: Объявите класс
Ключевое слово extends определяет класс, который является подклассом другого класса. Подкласс наследует все методы, свойства и функции; таким образом, мы можем использовать их в нашем классе.
Наш класс документов собирается расширить класс MovieClip.
1
2
|
public class Snow extends MovieClip
{
|
Шаг 10: настройка переменных
Давайте посмотрим на переменные, которые мы будем использовать.
1
2
3
4
|
//A Vector object that will store the snowflakes movieclips
private var flakesVector:Vector.<MovieClip> = new Vector.<MovieClip>();
//Timer object that controls the horizontal movement
private var timer:Timer = new Timer(2000);
|
(Если вы используете Flash CS3, вы можете использовать массив вместо вектора.)
Шаг 11: Напишите конструктор
Конструктор — это функция, которая запускается, когда объект создается из класса; этот код выполняется первым, когда вы создаете экземпляр объекта или запускаете с использованием класса документа. В этом случае это первый код, который запускается при запуске нашего SWF.
Здесь мы указали два параметра, которые имеют значения по умолчанию: параметр скорости, который хранит пиксели, которые каждая снежинка перемещает вниз на каждый кадр, и flakesNumber, который представляет собой количество снежинок, представленных на экране.
1
2
|
public function Snow(speed:int = 3, flakesNumber = 150):void
{
|
Шаг 12: продублируйте снежинки
Оператор for обрабатывает это действие.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
for(var i:int = 0; i < flakesNumber; i++)
{
//Instantiates the snowflake clip
var flake:Snowflake = new Snowflake();
//Gives a unique and random falling speed to each snowflake
flake.vel = (Math.random() * speed) + 0.5;
//Picks a random value between 0.5 and -0.5, this is the horizontal movement speed
flake.xSpeed = Math.floor(Math.random() * (0.5 — -0.5 + 1)) + -0.5;
flake.scaleX = (Math.random() * 1) + 0.3;
flake.scaleY = flake.scaleX;
flake.x = Math.random() * stage.stageWidth;
flake.y = Math.random() * stage.stageHeight;
addChild(flake);
//Adds the clip to the Vector object so it can be accessed by other functions
flakesVector.push(flake);
}
//Adds a listener to the stage to execute the fall function every frame
addEventListener(Event.ENTER_FRAME, fall);
timer.addEventListener(TimerEvent.TIMER, changeMovement);
timer.start();
}
|
Шаг 13: добавь функцию падения
Падающая функция.
Это будет срабатывать каждый кадр из-за прослушивателя событий ENTER_FRAME. Он будет перемещать снежинки по горизонтали и вниз по каждому кадру в соответствии со скоростью, рассчитанной в xSpeed и vel. Это также переместит снежинки наверху, когда они пройдут внизу сцены.
1
2
3
4
|
private function fall(e:Event):void
{
//This for loops through the snowflakes to apply the code to every clip
for(var i:int = 0; i < flakesVector.length; i++) {
|
Шаг 14: Горизонтальное движение
Переместите каждую снежинку горизонтально. Сначала каждый будет двигаться только вправо, но обработчик события таймера изменит это.
1
|
flakesVector[i].x += flakesVector[i].xSpeed;
|
Шаг 15: Вертикальное движение
Снежинка будет перемещаться вниз по каждому кадру с помощью переменной vel (скорость), которая имеет различное значение для каждой чешуи.
1
|
flakesVector[i].y += flakesVector[i].vel;
|
Шаг 16: Сбросить позиции
Если клип со снежинкой окажется ниже сцены, он будет перемещен обратно наверх и назначен новый случайный x-postition.
1
2
3
4
5
|
if(flakesVector[i].y > stage.stageHeight)
{
flakesVector[i].x = Math.random() * stage.stageWidth;
flakesVector[i].y = -flakesVector[i].height;
}
|
Шаг 17: Изменить движение
Объект Timer изменит горизонтальное перемещение чешуек, умножив xSpeed каждой чешуйки на -1 каждые пару секунд. Эта функция вызывается прослушивателем событий TIMER, который мы добавили ранее.
1
2
3
4
5
6
7
8
9
|
private function changeMovement(e:TimerEvent):void
{
for(var i:int = 0; i < flakesVector.length; i++)
{
flakesVector[i].xSpeed *= -1;
}
}
}
}
|
Шаг 18: Установите класс документа
Вернитесь к файлу .fla и в панели свойств напишите Snow в поле Class, чтобы сделать этот класс документа.
Проверьте свой фильм, чтобы увидеть эффект в действии.
Шаг 19: попробуй нестандартные снежинки
Вы можете изменить MovieClip Snowflake, чтобы он выглядел так, как вы хотите, это пример результатов, которые вы можете получить!
Вывод
Поиграйте с параметрами класса и создайте собственные мувиклипы, чтобы создать собственный эффект снега.
Спасибо за прочтение!