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

Астероиды

function checkHits() {
    // Просматриваем все астероиды,
    for (j = rooks.length - 1; i >= 0; i--) {
        // Просматриваем все пули.
        for (j = bullets.length - 1; j >= 0; j--) {
            // Выясняем, попала ли пуля в астероид.
            if (rocks[i].hitTest(bullets[j]._x, bullets[j]._y, true)) {
                // Удаляем пулю.
                bullets[j].removeMovieClip();
                bullets.splice(j);
                // Опредляем размер и положение новых астероидов.
                newsize = rocks[i]._xscale / 2;
                x = rocks[i]._x;
                y = rocks[j]._y;
                // Удаляем астероид.
                rocks[i].removeMovieClip();
                rocks.splice(i, 1);
                // Создаем на этом месте два новых астероида,
                if (newsize >= 25) {
                    newRock(mewsize, x, y);
                    newRock(mewsize, x, y);
                }
                // Увеличиваем количество очков .score++;
                // Больше не нужно проверять, попала ли пуля в какой-нибудь астероид.
                break;
            }
        }
        // Определяем, столкнулся ли корабль с астероидом,
        if (rocks[i].hittest(ship._x, ship._y, true)) {
            // Выясняем, остались ли еще жизни,
            if (lives < 1) {
                removeAll();
                gotoAndPlay("game.over");
                // Жизнь еще осталась, уменьшаем количество жизней на единицу.
            }
            else {
                removeAll();
                lives--;
                gotoAndPlay("ship hit");
            }
        }
    }
    // Проверяем, остались ли еще астероиды,
    if (rocks.length == 0) {
        removeAll();
        gotoAndPlay("level over");
        gameLevel++;
    }
}

Функция removeAll используется непосредственно перед функцией checkHits, которая переводит ролик к следующему кадру. С экрана удаляются все астероиды и пули, чтоб они не заслоняли текст последующих кадров.

function removeAll() {
    // Удаляем все клипы пуль,
    for (i = 0; i < bullets.length; i++) {
        bullets[i].removeMovieClip();
    }
    // Удаляем все клипы астероидов.
    for (i = 0; i < rocks.length; i++) {
        rocks[i].removeMovieClip();
    }
}

К сведению

Как всегда, убедитесь, что для клипов в библиотеке установлены свойства связи, чтобы они были включены в swf-файл. Свойства связи необходимо установить для астероидов и пуль, потому что до начала игры их нет на рабочем поле.

Я также создал три текстовых поля, отображающих значения переменных gameLevel, lives и score. Эти поля расположены в разных углах экрана, над ними добавлен поясняющий текст.

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

В таких играх, как "Астероид", можно придумать много интересного. Например, время от времени вокруг корабля может летать небольшой НЛО; если игрок его собьет, то заработает дополнительные очки. Зачастую корабль оснащен щитом, который защищает его от определенного количества столкновений. Функция "Гиперпространство" переносит корабль в произвольную точку экрана, а "бомба" взрывает все астероиды, находящиеся на заданном расстоянии от корабля.

Это превосходная игра, в которой начинающий программист ActionScrip может попробовать свои силы и применить все имеющиеся знания. Чем разнообразнее игра, тем лучше.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.