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

Найди картинку

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

Имя эталона основного клипа в библиотеке – "picture". Он содержит три растровых изображения, по одному в каждом кадре. В первом кадре находится команда stop (). Картинки выстроены так, что верхний левый угол каждой располагается в центральной точке клипа.

Клип "picture" никогда не находится в рабочем поле сам по себе, а внутри двух других клипов: "fullPicture" и "maskedPicture".

В клипе "fullPicture", клип "picture" находится на одном слое, а маленький квадратный клип "button" – поверх него в другом слое.

В клипе "maskedPicture" клип "picture" также находится на одном слое, а клип "button" – на другом. Однако слой кнопки – это слой-маска, маскирующий слой картинки. Это значит, что только сегмент картинки под квадратом остается видимым, когда клип "maskedPicture" расположен в рабочем поле.

В рабочем поле клипы "fullPicture" и "maskedPicture" расположены бок о бок. Размешать клип "maskedPicture" достаточно сложно, поскольку, когда вы его двигаете, он показывает свои границы, которые довольно велики и покрывают все рабочее поле. Як тому же увеличил этот клип до 300%, что сделало его еще больше.

Главная временная шкала содержит четыре кадра. Первый – это страница с правилами. Потом идет кадр "play". Когда игрок заканчивает одну картинку, ролик переходит к кадру "next", чтобы дать игроку передохнуть перед следующей картинкой. Последний кадр – это кадр "game over".

В ролике используются два динамических текстовых поля. Первое, displayBonus, используется в кадре "play". Поле displayScore используется в кадрах "next" и "game over".

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

В начале ролика задаются функции roundNum и score. Переменная roundNum содержит номер картинки, которая должна появиться.

// Начинаем с первой картинки.
roundNum = 1;
score = 0;
stop();

Игра начинается, когда пользователь нажимает кнопку в первом кадре. Все коды содержатся на главной временной шкале, в первом слое. Нажатие кнопки вызывает функцию setUpRound.

После того как функция отправляет ролик к кадру "Play", она определяет два клипа. Содержащийся в каждом из них клип "picture" устанавливается в кадр, определяемый переменной roundNum.

После этого выбирается случайное место на картинке. Это происходит с учетом того, что площадь сегмента 36x36, таким образом, это случайное место должно быть не ближе 18 пикселов от края изображения.

В клипе "maskedPicture" положение картинки изменяется таким образом, что случайное место располагается в позиции (0.0), на которой располагается квадрат-маска. Таким образом, если сегмент выбрана из позиции (100, 150), то увеличенная картинка должна быть сдвинута на – 100 пикселов по горизонтали и на – 150 – по вертикали.

В клипе "fullPicture" картинка остается неподвижной, а движется клип "button", пока не займет нужное положение. Свойство _alpha равно 0, чтобы кнопка была невидимой.

Вместо того, чтобы задавать свойство _alpha клипа равным 0, попробуйте задать его равным 25 во время отладки программы. Поскольку клип будет видимым, вам будет легче понять, что игра работает.

function setUpRound(pictureNum) {
    // Переходим к кадру игры .gotoAndStop("Play");
    // Выбираем картинку в обоих клипах.
    fullPicture.picture.gotoAndStop(pictureNum);
    maskedPicture.picture.gotoAndStop(pictureNum);
    // Задаем случайное положение картинки.
    w = fullPicture._width;
    h = fullPicture._height;
    x = Math.random() * (w - 36) + 18;
    y = Math.random() * (h - 36) + 18;
    // Передвигаем картинку под маской в это положение.
    maskedPicture.picture._x = -x;
    maskedPicture.picture._y = -y;
    // Задаем координаты кнопки.
    fullPicture.button._x = x;
    fullPicture.button._y = y;
    // Делаем кнопку невидимой.
    fullPicture.button._alpha = 0;
    // Запускаем таймер.
    startTime = getTimer();
}
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.