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

Платформенный скроллер

Функция creatWorld создает массив objects и заполняет его положением всех блоков, орехов и кроликов. Она также задает глобальную переменную worldEnd, которая определяет правую границу игрового пространства.

function createWorld() {
    objects = new Array();
    objects.push({
        type: "box",
        x: 250,
        y: 0
    });
    objects.push({
        type: "box",
        x: 300,
        y: 0
    });
    objects.push({
        type: "box",
        x: 500,
        y: 0
    });
    objects.push({
        type: "box",
        x: 550,
        y: 0
    });
    objects.push({
        type: "box",
        x: 600,
        y: 0
    });
    objects.push({
        type: "box",
        x: 650,
        y: 0
    });
    objects.push({
        type: "box",
        x: 700,
        y: 0
    });
    objects.push({
        type: "box",
        x: 550,
        y: 50
    });
    objects.push({
        type: "box",
        x: 600,
        y: 50
    });
    objects.push({
        type: "box",
        x: 650,
        y: 50
    });
    objects.push({
        type: "box",
        x: 850,
        y: 0
    });
    objects.push({
        type: "box",
        x: 900,
        y: 0
    });
    objects.push({
        type: "box",
        x: 1050,
        y: 100
    });
    objects.push({
        type: "box",
        x: 1100,
        y: 100
    });
    objects.push({
        type: "box",
        x: 1150,
        y: 100
    });
    objects.push({
        type: "acorn",
        x: 150,
        y: 0
    });
    objects.push({
        type: "acorn",
        x: 275,
        y: 200
    });
    objects.push({
        type: "acorn",
        x: 1100,
        y: 250
    });
    objects.push({
        type: "bunny",
        x: 400,
        y: 0
    });
    objects.push({
        type: "bunny",
        x: 1200,
        y: 0
    });
    worldEnd = 1400;
}

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

После создания массива objects функция creatObjects просматривает его в цикле и создает все соответствующие клипы.

function createObjects() {
    for (var i = 0; i < objects.length; i++) {
        _root.attachMovie(objects[i].type, "object " + i, i);
    }
}

Функция moveFox – это главный движущий механизм всей игры. В ней идет ряд проверок, которые отслеживают появление определенных событий в игре.

Сначала вызывается функция determineBounds, которой передается значение координат лисы (1). Эта функция возвращает максимальные значения расстояний вверх, вниз, вправо и влево, на которые может передвигаться лиса, не натыкаясь на какой-нибудь блок.

Далее, функция moveFox проверяет, есть ли пустое место под лисой и не находится ли лиса в состоянии падения, что определяется с помощью переменной falling (2). Если это так, то лиса начинает падать.

Если falling равняется true, то вызывается функция checkFall для обработки вертикального движения (3).

Далее, проверяется не нажаты ли стрелки "вправо" и "влево" (4). Если да, то проверяются оба значения foxBounds.left и foxBounds.right, чтобы определить, есть ли место для движения лисы. Также проверяются границы игрового пространства – 0 и worldEnd, – чтобы лиса не выходила за их пределы. Переменная moving принимает значение true только если нажата клавиша со стрелкой. Эта переменная определяет, какая часть клипа "fox" будет проигрываться.

Лиса прыгает при нажатии пробела (5). Прыжок противоположен падению, поэтому переменная fallSpeed принимает положительное значение (когда лиса падает, ее значение меньше ноля). Если в момент нажатия пробела лиса стоит, то запускается анимация прыжка лисицы. Если же лиса находится в движении, когда нажат пробел, то клип лисы остается в позиции шага (то есть она прыгает в том положении, в котором ее застало нажатие на пробел).

Следующий фрагмент кода отвечает за анимацию лисы (6). Если лиса, движется и не падает вниз (не прыгает вверх), то клип лисы переходит к следующему кадру. Благодаря этому ноги лисы "шагают". Если же лиса движется или падает, то клип лисы переходит в первый кадр с изображением стоящей лисы.

В то время как горизонтальная позиция лисы постоянно находится в центре экрана, ее вертикальное положение может меняться. Вертикальное положение лисы задается свойством foxPos.y, а земля находится в вертикальной позиции 0. Значит, чтобы получить свойство клипа лисы, мы должны вычесть foxPos.y из значения переменной floor (7).

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