Гэри Розенцвейг - Adobe Flash. Создание аркад, головоломок и других игр с помощью ActionScript стр 25.

Шрифт
Фон

...

Примечание

Оператор ++ увеличивает значение переменной на единицу. Таким образом, если значение n равно 7, то строка n++ увеличивает его до 5. Для уменьшения значения используется оператор .

В данном примере значение переменной n, описываюшей красный цвет, изменяется от 0 до 255. При достижении максимального значения 255 цвет больше не меняется. Применение сценария демонстрируется на Web-сайте в ролике Gradualtransform.fla.

Вся эта информация о цветах и преобразовании может использоваться для создания специальных эффектов. Давайте попробуем сделать что-нибудь более интересное.

Возьмем основной пример данного раздела и сделаем так, чтобы клип по очереди изменял свой цвет на один из цветов радуги. Для этого необходимо изменить красную, зеленую и синюю составляюшие. Здесь будет использоваться та же самая функция setTransform, однако алгоритм изменения значений по сравнению с предыдушим примером будет более сложным.

В качестве исходного для красного, зеленого и синего цветов берется значение 255, которое изменяется следующим образом:

1. Значение красного цвета уменьшается до 0.

2. Значение синего цвета уменьшается до 0.

3. Значение красного цвета увеличивается до 255.

4. Значение зеленого цвета уменьшается до 0.

5. Значение синего цвета увеличивается до 255.

6. Значение зеленого цвета увеличивается до 255.

При этом цвета белый, циан (cyan), зеленый, желтый, красный, фуксин (magenta), белый будут плавно преврашаться из одного в другой в указанной последовательности. В ней участвуют все цвета, кроме чистого синего. Так мы создадим изменяюшую цвет спираль.

Подготовка ролика

В данном ролике будет использоваться один элемент – спиральная фигура. Поместите его в центр рабочего поля. Начальный цвет спирали должен быть белым, а фоновый – черным.

Смена цветов и вращение

Ролик будет состоять из одного сценария, назначенного клипу с изображением спирали.

Переменная n, участвуюшая в сценарии, содержит способ изменения цвета. Значение цвета будет соответствовать числу из предыдушего списка. Так, например, если n будет равно 3, значение красной составляюшей увеличится.

Значение переменной n сначала равно 1, затем увеличивается до 6 и далее цикл повторяется. Ниже приведена часть кода c последовательностью if…then, которая использует значение переменной n и изменяет объект преобразования цвета.

if (n == 1) {

colorTransform.rb -= 5;

if (colorTransform.rb ==0) n = 2;

} else if (n == 2) {

colorTransform.bb -= 5;

if (colorTransform.bb ==0) n = 3;

} else if (n == 3) {

colorTransform.rb += 5;

if (colorTransform.rb == 255) n = 4;

} else if (n == 4) {

colorTransform.gb -= 5;

if (colorTransform.gb == 0) n = 5;

} else if (n == 5) {

colorTransform.bb += 5;

if (colorTransform.bb == 255) n = 6;

} else if (n == 6) {

colorTransform.gb += 5;

if (colorTransform.gb == 255) n = 1;

}

...

Примечание

Оператор += используется для прибавления к переменной определенного числа. Например, код n += 5 прибавляет 5 к значению n. Этот код аналогичен коду n = n + 5. Оператор =- используется для вычитания определенного числа из переменной.

Значение переменной n проверяется в каждой части выражения if.then. В случае совпадения одна из трех цветовых составляюших объекта colorTransform изменяется. После окончания изменений, сама переменная n меняет свое значение на следующие.

Полная программа представляет собой обычный клип ActionScript с функциями onClipEvent(load) и onClipEvent(enterFrame). Первая вводит объекты цвета и преобразования, вторая выполняет постепенное изменение цветов.

Кроме того, мы сделаем так, чтобы клип врашался. Врашение достигается постепенным увеличением значения параметра _rotation.

onClipEvent(load) {

// Создаем объект цвета и цветовой трансформации.

spiralColor = new Color(this);

colorTransform = {rb:255, bb:255, gb:255};

// Вначале n равно единице.

n = 1;

}

onClipEvent(enterFrame) {

// Определяем, какую составляющую необходимо изменить.

if (n == 1) {

colorTransform.rb -= 5;

if (colorTransform.rb == 0) n = 2;

} else if (n == 2) {

colorTransform.bb -= 5;

if (colorTransform. bb == 0) n = 3;

} else if (n == 3) {

colorTransform.rb += 5;

if (colorTransform. rb == 255) n = 4;

} else if (n == 4) {

colorTransform.gb -= 5;

if (colorTransform. gb == 0) n = 5;

} else if (n == 5) {

colorTransform.bb += 5;

if (colorTransform.bb == 255) n = 6;

} else if (n == 6) {

colorTransform.gb += 5;

if (colorTransform. gb == 255) n = 1;

}

// Задаем новый цвет.

spiralColor.setTransform(colorTransform);

// Вращаем спираль.

this._rotation += 5;

}

...

Примечание

Объект this обозначает обращение клипа к самому себе. Так как сценарий назначен клипу, использование this будет обозначать, что команда, следующая после this, относится к самому клипу, а не к другому клипу или ролику.

...

Примечание

Параметр клипа _rotation используется для поворота клипа на определенное количество градусов. Он может иметь как положительные, так и отрицательные значения. Если вы укажете значение больше 360°, Flash автоматически преобразует его. К примеру, при вводе значения 370° клип будет повернут на 10°.

На рис. 5.4 изображен фрагмент ролика Spiral.fla.

Гэри Розенцвейг - Adobe Flash. Создание аркад, головоломок и других игр с...

Рисунок 5.4. Спираль изменяет цвет и вращается

Хотя этот же эффект можно получить и средствами классической анимации, ActionScript позволяет сделать это намного быстрее.

К сведению

Частота смены кадров ролика определяет скорость врашения спирали и смены цветов. Максимальная частота во Flash 8 – 120 кадр/с. Однако следует иметь в виду, что частота смены кадров напрямую зависит от быстродействия компьютера.

Другие возможности

Изменив оператор += на -= в последней строке кода, вы заставите спираль врашаться в обратном направлении. Вы можете также изменить способ смены цветов, изменив значения красной, зеленой и синей составляюших.

Случайность и эффект старого кино

Исходные файлы: Randomlocation.fla, Randommovement.fla, Oldfilm.fla

Используя Flash исключительно в качестве инструмента анимации, можно добиться поразительных эффектов, но каждый раз анимация будет воспроизводиться одинаково. ActionScript имеет алгоритм выбора случайных чисел, благодаря чему в содержание ролика можно вносить элемент некой непредсказуемости.

Задача проекта

Задача данного раздела – научиться использовать случайные числа для создания визуальных эффектов. Возможно, вы захотите создать "эффект старого кино", когда на изображении кое-где появляются царапины и точки.

Подход

Во 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;

Ваша оценка очень важна

0
Шрифт
Фон

Помогите Вашим друзьям узнать о библиотеке