Задача проекта
Задача данного раздела – научиться использовать случайные числа для создания визуальных эффектов. Возможно, вы захотите создать «эффект старого кино», когда на изображении кое-где появляются царапины и точки.
Подход
Во Flash MX сушествует два способа генерирования случайных чисел. Первый – включить в код функцию Random, которая была в четвертой версии программы. Эта функция выдает значение в диапазоне от 0 до значения, на единицу меньшего, чем аргумент. К примеру, функция Random(5) выдаст значение от 0 до 4.
Во Flash MX появилась функция Math.random(). Возможно, что в следующих версиях Flash функции Random уже не будет. Функция Math.random() выдает число с плаваюшей запятой от 0,0 до 1,0.
Чтобы получить значение вне диапазона [0..1], результат функции Math.Random() можно умножить на какое-нибудь число. Например, умножение результата на 500 даст значение в диапазоне от 0,0 до 500,0. Функция int округляет результат в меньшую сторону. Использование этой функции в нашем случае позволит получить целое значение в диапазоне от 0 до 499. Приведем пример:
n = int(Math.random()*500);
Следуюшая короткая функция перемешает клип в случайное место экрана, имеюшего размер 550x400.
onClipEvent(load) {
this._x = Math.random()*550;
this._y = Math.random()*400;
}
Использование вышеприведенной функции демонстрируется в ролике Randomlocation.fla, который размешен на Web-сайте поддержки книги. Запустите файл несколько раз, чтобы убедиться, что ролик каждый раз перемешается в другое место экрана.
Следуюшим шагом является создание случайных чисел и их использование для периодичности внесения хаотичности в ролик.
Нижеприведенный сценарий перемешает клип в случайном направлении. Переменные
dxи
dyпринимают значения в интервале от -5 до 5 и задают величину изменения координат клипа _x и _y соответственно (фактически
dxи
dyопределяют скорость перемешения клипа). Переменные
dxи
dyизменяют свои значения в случайные моменты времени.
onClipEvent(load) {
dx = Math.random()*10-5;
dy = Math.random()*10-5;
}
onClipEvent(enterFrame) {
this._x += dx;
this._y += dy;
if (Math.random() > .9) {
dx = Math.random()*10-5;
dy = Math.random()*10-5;
}
}
Действие этого сценария демонстрируется в ролике Randommovement.fla. Эллипс перемешается по экрану случайным образом. Он даже может покинуть пределы рабочего поля, так как никаких ограничений в коде не задано.
Подготовка ролика
В качестве примера использования случайных чисел создадим один из популярных Flash-эффектов: сымитируем старую кинопленку. Обычно данный эффект достигается средствами анимации. Аниматор помешает небольшие точки и трешинки в различные кадры ролика, а также показывает линию, проходяшую вдоль ролика и представляюшую царапину на пленке.
Все эти эффекты легко создать в ActionScript. К примеру, царапину можно создать, поместив вдоль одной стороны ролика белую вертикальную линию.
Для того чтобы применить знания о случайных числах, вам прежде всего необходимо какое-нибудь исходное изображение, на которое будут накладываться царапины и пятна.
На рис. 5.5 показан фрагмент исходного ролика. В этом ролике пропеллер самолета врашается, а лиса моргает. Возможно, ваш ролик будет содержать больше анимации.
Рисунок 5.5.
Простой анимационный ролик, использующий случайные пятна и царапины для создания эффекта старого кино
Помимо фонового изображения вам понадобятся клипы пятен и царапин для размешения поверх ролика. В примере Oldfilm.fla царапина представляет собой простую вертикальную линию внутри клипа. Пятно – это небольшой овал внутри другого клипа.
Создание кода
Сначала напишем код для царапины. Поместите копию клипа царапины на рабочее поле и назначьте ему следующий сценарий:
onClipEvent(load) {
wanderAmount = 300;
leftLimit = 10; rightLimit = 540;
chanceOfJump = 50;
xPosition = 275;
speed = 10;
chanceOfChange = 0;
}
onClipEvent(enterFrame) {
xPosition += speed;
this._x = xPosition;
chanceOfChange++;
if ((Math.random()*wanderAmount < chanceOfChange or
(xPosition < leftLimit) or (xPosition > rightLimit)) {
speed = -speed;
chanceOfChange = 0;
}
if (Math.random()*chanceOfJump == 1) {
xPosition = Math.random()*(rightLimit-leftLimit)+leftLimit;
}
}
...
Примечание
При вычислении результата математических функций с числами Flash осушествляет операции в следующем порядке: умножение и деление выполняются перед сложением и вычитанием. К примеру, 2x3+4 будет равно 10. Для изменения порядка выполнения операций необходимо использовать скобки. Например, 2x(3+4) будет равно 14.
Первая часть сценария вводит некоторые переменные. Переменные leftLimitи rightLimitописывают границы линии по горизонтали. Код не позволит ей выйти за пределы этих значений. Переменная speedопределяет, насколько перемешается линия в каждом кадре. Остальные переменные задают изменения анимации.
Читать дальше
Конец ознакомительного отрывка
Купить книгу