Иллюстрированный самоучитель по Flash-games

Создание кода


В сущности «волшебство» данного ролика создается в сценарии Action Script кнопки. Как было сказано выше, сценарий задает переход ролика ко второму кадру и запускает анимацию. Это фактически последнее важное событие. Перед этим генерируется ответ, который помешается в текстовую область.
Так как ответ активизируется щелчком по кнопке, весь код необходимо поместить в сценарий, назначенный кнопке. Такой сценарий всегда начинается с оператора on, далее следует описание реакции на событие. Одним из часто используемых событий является событие release (нажатие кнопки).
Вначале сценарий создает массив и заполняет его списком ответов. Для этого существует множество способов. Один из них приведен ниже:

responses = new Array("Yes", "No", "Ask again later","It is certain", "Doubtful", "Probably", "The answer is unclear","Of course not!", "Certainly!", "It looks positive", "It looks negative");

Это наиболее короткий способ создания массива и его одновременного заполнения. Однако он выглядит немного беспорядочно, так как текст переносится с одной строки на другую. Приведем другой способ:

responses = new Array();

responses[0]("Yes");

responses[1]("No");

responses[2]("Ask again later");

responses[3]("It is certain");

responses[4]("Doubtful");

responses[5]("Probably");

responses[6]("The answer is unclear");

responses[7]("Of course not!");

responses[8]("Certainly!");



responses[9]("It looks positive");

responses[10]("It looks negative");

Этот способ является более аккуратным, в нем каждый ответ располагается на отдельной строке. Вы можете сразу увидеть, из каких элементов он состоит. Однако здесь вам придется в каждой строке вводить номер элемента в скобках. В случае ошибки вы можете пропустить очередной ответ или оставить место пустым. Поэтому лучше пользоваться третьим способом:


Код, задающий воспроизведение звукового файла, несложный, но и не такой простой, как можно было бы ожидать. Вместо одной команды воспроизведения звука вам придется записать три строки: первая создает звуковой объект, вторая соотносит звуковой файл из библиотеки объектом, третья задает воспроизведение звукового файла.

song = new Sound();

song.attachSound("song1") ;

song.start();

Функция playSong должна выполнять еще несколько действий. Прежде всего, останавливать воспроизведение предыдущей песни. Это осуществляется при помощи команды stop. Предположим, что предыдущая песня содержится в глобальной переменной song и воспроизводится в данный момент. Приведем простой вариант функции:

function playSong(songnum){

// Останавливаем воспроизведение предыдущей песни,

song.stop();

// Проигрываем новую песню,

song = new Sound ();

song.attachSoundt "song"+songnum);

song.start();

}

Осталось добавить еще один специальный эффект - подсвечивание названия выбранной песни. Клип каждого выбираемого элемента содержит два кадра: без подсветки и с подсветкой. На рис. 6.9 изображение музыкальный автомат с подсветкой выбранного элемента.
Перед запуском воспроизведения каждой песни необходимо y6eдиться в том, что подсветка всех песен выключена, а затем включить подсветку только выбранной песни:

function playSong(songnum) {

// Останавливаем воспроизведение предыдущей песни.

song.stop();

// Убираем подсветку.

for(i=1;i

this[i].gotoAndStop(1);

}

// Проигрываем новую песню,

song = new Sound();

song.attachSound("song"+songnum);

song.start();

this[songnum].gotoAndStop(2);

}

Рисунок 6.9 Музыкальный автомат воспроизводит песню под номером 2




Код, который выполняет все вышеописанные действия, - это cценарий onClipEvent (enterFrame), помещаемый в клип. Код можно посмотреть в файле Simpleclock.fla.

onClipEvent (enterFrame) {

// Узнаем текущее время.

now = new Date();

hour = now.getHours();

minute = now.getMinutes();

second = now.getSeconds();

// Конвертируем в значение для 12-часового дня.

if (hour > 12) {

hour -= 12;

}

// Рассчитываем углы для поворота стрелок.

hourAngle = 360*hour/12;

minuteAngle = 360*minute/60

secondAngle = 360*second/60;

/// Поворачиваем сами ролики

_root["hour hand"]._rotation = hourAngle;

_root["minute hand"]._rotation = minuteAngle;

_root["second hand"]._rotation = secondAngle;

}

Чтобы определить значение углов, значение времени делится на наибольшее возможное значение и умножается на 360. Например, значение минут делится на 60, в результате чего получается значение между 0 и 1, а затем умножается на 360, что дает значение угла между 0° и 360°. Чтобы стрелка была 12-, а не 24-часовой, из значения часов вычитается 12.
Результатом каждой операции является угол от 0° до 360°. 0° обозначает 0 (или 12) часов, 0 минут, 0 секунд. В данном случае изображения всех трех клипов, представляющих стрелки часов, будут указывать вверх (рис. 6.11). Затем, после задания параметра „rotation, стрелки будут указывать на соответствующее место.

Рисунок 6.11 Руки и хвост (то есть стрелки часов), направленные четко вверх, соответствуют 12:00:00. Когда вы зададите параметр _rotation, стрелки будут указывать в соответствующем направлении

Проблема состоит в том, что устройство будет работать не совсем как обычные часы. Например, на рис. 6.10 часовая стрелка указывает на 9 часов. Она будет продолжать указывать на отметку 9, даже когда будет 9:59, а затем в 10:00 сразу передвинется на отметку 10. В настоящих часах часовая стрелка будет в течение часа постепенно передвигаться, пока не достигнет отметки 10 в 10 часов. Для того чтобы получить такой результат, необходимо немного увеличивать угол часовой стрелки каждую минуту и угол минутной стрелки каждую секунду, Приведем соответствующий код:




Lava Lamp использует 20 экземпляров клипа, созданных из одного библиотечного эталона. С помощью команды attachMovie копии клипа добавляются в ролик. Более подробно о команде attachMovie рассказано в главе 5, раздел "Эффект трехмерности".
При запуске ролика в первом и единственном кадре временной шкалы выполняется функция initLamp. При этом помимо 20 клипов пузырьков будет создан массив объектов, которые определяют скорость движения каждого пузырька.
Кроме того, верхняя и нижняя части лампы будут непрозрачными, из-за чего здесь пузырьки не будут видны. Поверх клипов пузырьков будет помешено изображение полупрозрачного стекла.
При использовании команд attachMovie или duplicateMovieClip необходимо указать уровень нового клипа. Уровень определяет порядок перекрывания клипов. Все новые клипы будут помешены перед существующими. Это значит, что пузырьки будут располагаться перед изображениями верхней, нижней и прозрачной частей лавовой лампы. С помощью команды duplicateMovieClip вы можете создать новые копии этих трех изображений, которые будут помешены поверх пузырьков.
Приведем код функции initLamp:

function initLamp () {

// Инициализируем переменные, обозначающие верхнюю и нижнюю

// координаты лавовой лампы по оси Y.

top = 0;

bottom = 300;

// Создаем экземпляры клипа, содержащего пузырек.

numBubbles = 20;

for (i=0; i<numBubbles; i++) {

attachMovie("bubble", "Bubble"+i, i);

}

// Дублируем изображения стекла, низа и верха лампы, чтобы // они оказались над пузырьками.

duplicateMovieClip("Glass", "Glass", i + +);

duplicateMovieClip("Top", "Top", i++);

duplicateMovieClip("Bottom", "Bottom", i++);

// Создаем объекты, содержащие значение скорости пузырьков.

bubbles = new Array();

for (i=0; i

bubbles[i] = {speed:0};

}

}

После того как все элементы подготовлены, воспроизведение ролика осуществляется по следующему принципу: время от времени вызывается функция, которая обновляет местоположение пузырьков и создает новые. Клип, расположенный за пределами рабочего поля, вызывает функцию moveBubbles в каждом событии enter Frame.
Функция moveBubbles задает перемещение пузырьков вверх или вниз и их остановку в верхней или нижней части ролика, а также в одном случае из 30 вызывает функцию newBubble для создания нового пузырька.



Содержание раздела