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

Игра на развитие памяти

Клип каждой птицы состоит из трех частей. Первая – непосредственно клип с самой птицей, первый кадр которого представляет собой изображение, второй и остальные кадры – анимация (птица чирикает, открывая и закрывая рот). Ролик начинается с того, что клип каждой птицы находится в первом кадре.

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

Третья часть клипа каждой птицы – просто анимация, показывающая сообщение, которое "вылетает" из клюва птицы. Этот простой клип используется для каждой птицы один раз. Экземпляр анимации сообщения и птица соответственно. Например, первая птица называется "bird1", а сообщение – “note1”. В анимации сообщения первый кадр пустой, там анимация останавливается. Во втором кадре анимации происходит возврат к первому кадру. В соответствующее время мы инициализируем сообщение, которое "вылетает" из клюва птицы.

Если вы внимательно посмотрите на элемент "Bird Button" из исходного ролика, вы увидите, что кадры "Up", "Over" и "Down" пусты, а в кадре "Hit" содержится контур птицы. Это значит, что никакого изображения на рабочем поле для кнопки не будет, а область нажатия кнопки будет совпадать с формой кадра "Hit". Такой способ создания невидимой кнопки отличается от уже описанного, когда создается кнопка и ее значение _alpha обнуляется.

Если рассмотреть анимацию птиц, вы увидите, что звук прикреплен к каждой из них. Звук автоматически воспроизводится при проигрывании анимации с птицей. Каждый звук немного отличается от другого.

В различных кадрах появляются различные части клипов птиц. Клипы с изображениями самих птиц представлены во всех шести кадрах. Однако кнопки появляются только в кадре "repeat", потому что только там игрок может щелкать мышкой по птицам. Анимация сообщения появляется только в кадрах под номерами 3-6, в первом и втором кадрах она не нужна.

Также в каждом кадре ролика содержатся указания, что должен делать пользователь. В верхнем правом углу всех кадров, кроме первого, находится текстовое поле scoreDisplay.

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

Код этого ролика делится на две части. Первая часть – набор функций, расположенных в первом кадре ролика. Вторая часть находится в клипе "playback actions", который управляет воспроизведением мелодий в кадре "play". Небольшие фрагменты кода есть и в других местах. Функции, используемые в этой ролике, расположены в первом кадре основной временной шкалы. Они инициализируют переменные игры, отвечают за реакцию на щелчки мышью и воспроизводят мелодии.

Сначала в игре вызывается функция initGame, которая устанавливает все переменные. Эта функция вызывается в начале игры всегда и в конце, если игрок хочет сыграть заново, то есть снова переходит к первому кадру.

Функция initGame очищает массив notes, затем вызывает функцию addNextNote, чтобы поместить в этот массив случайное число. Также она указывает, что счет игры должен отображаться равным 0.

initGame();
stop();
function initGame() {
    // Очищаем массив сообщений,
    notes = new Array();
    scoreDisplay = "Score: 0";
    // Добавляем первое сообщение.
    addNewNote();
}

Функция addNextNote случайным образом выбирает номер кадра от 1 до 4 и помещает его в массив notes.

function addNextNote() {
    // Выбираем случайное число из диапазона от 1 до 4.
    r = int(Math.Random() * 4 + 1);
    // Добавляем число в массив,
    notes.push(r);
}

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

Переменная repeatNum отслеживает, по какому элементу должен щелкнуть игрок. Изначально ее значение равно 0, а затем оно изменяется каждый раз, когда пользователь щелкает по птице.

function startRepeat() {
    // Определяем, по какому элементу
    // должен теперь щелкнуть пользователь.
    repeatNum = 0;
    // Переходим к кадру, где размещены кнопки.
    gotoAndPlay("repeat");
}

Функция clickBird вызывается теми кнопками, которые спрятаны за изображениями птиц; ей передается номер элемента, по которому щелкнули. Сначала функция проигрывает анимацию птицы и соответствующую анимацию пения. Затем сравнивает сообщение со следующим сообщением в списке. Если они совпадают, значит, игрок правильно выбрал птицу, и значение переменной repeatNum увеличивается. Если это было последнее сообщение, игра переходит к кадру "correct". В противном случае функция ждет, пока не выберут следующее сообщение. Если сообщение не совпадает с предопределенным, ролик переходит к кадру "wrong", и игра заканчивается.

function clickBird(note) {
    // Воспроизводим анимацию птицы.
    _root["bird" + note].gotoAndPlay(2);
    // Воспроизводим анимацию сообщения.
    _root["note" + note].gotoAndPlay(2);
    // Проверяем, правильно ли был выбран элемент,
    if (note == notes[repeatNum]) {
        // Ожидаем воспроизведения следующей мелодии.
        repeatNum++;
        // Если мелодий больше нет, игрок правильно угадал
        // последовательность.
        if (repeatNum > notes.length - 1) {
            scoreDisplay = "Score: " + notes.length;
            gotoAndPlay("correct");
        }
    }
    else {
        // Игрок ошибся.
        gotoAndPlay("wrong");
    }
}
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.