Обе эти функции расположены в основной временной шкале первого кадра. Сценарий ролика начинается с функции startGame,
которая вызывается, когда в первом кадре игрок щелкает по кнопке Play. Она устанавливает значение переменной gameLevel, отображаемое в текстовом поле в верхнем правом углу экрана. Затем с помощью функции startLevel начинается первый уровень.function startGame {
gameLevel = 1;
startLevel;
}Функция startLevel
выполняет множество задач. Сначала она переводит ролик к кадру в соответствии со значением переменной gameLevel, затем помещает корабль вверху экрана. Скорость корабля, которая определяется величинами dx и dy, обнуляется. Для увеличения скорости корабля и для того, чтобы он начал двигаться вниз, используется переменная gravity.В массивах hitPoints
и footPoints содержатся координаты некоторых точек относительно центра корабля. Для определения, коснулся ли корабль поверхности луны, используются элементы массива hitPoints. А оба элемента массива footPoints нужны, чтобы определить, находятся ли обе опоры лунохода на посадочной площадке.В массиве pads хранятся имена трех клипов посадочных площадок. На одном уровне имеется всего лишь две посадочные площадки, но язык ActionScript этого не учитывает.function startLevel {
gotoAndStop("level"+gameLevel);
// Размещаем клип корабля.
ship._x = 275;
ship._x = 25;
// Корабль не движется.
ship.dx = 0;
ship.dy = 0;
// Инициализируем гравитацию.
gravity = .1;
// Инициализируем индикатор горючего.
fuel = 100;
showFuel;
// Определяем точки корабля, которые могут коснуться поверхности Луны.
hitPoints = new Array;
hitPoints.push({x:-9, y:13});
hitPoints.push({x:9, y:13});
hitPoints.push({x:0, y:-10});
hitPoints.push({x:-9, y:-7});
hitPoints.push({x:8, y:-7});
// Определяем координаты опор лунохода.
footPoints = new Array;
footPoints.push({x:-9, y:13});
footPoints.push({x:9, y:13});
// Создаем массив из клипов "pad" (посадочная площадка).
pads = new Array;
for (i=0; i<3; i++) {
pads.push(_root["pad"+i]);
}
}В каждом кадре посредством клипа «actions» вызывается функция moveShip,
которая, в свою очередь, вызывает множество небольших функций для управления кораблем. Всегда лучше разбивать большой фрагмент кода на несколько небольших функций.function moveShip {
shipThrusters;
shipMovement;
checkForLand;
checkForCrash;
}Функция shipThrusters
проверяет, осталось ли еще горючее, если нет, то клип «ship» переходит к кадру «normal». В противном случае, если игрок нажимает на одну из клавиш со стрелками «вверх», «влево» или «вправо», включается соответствующий ускоритель. Клип «ship» переходит к соответствующему кадру, и чтобы отразить эффект действия ускорителя, изменяются значения dx и dy. Также уменьшается количество топлива.function shipThrusters {
// Проверяем ускорители и корректируем скорость.
if (fuel < 0) {
ship.gotoAndStop("normal");
} else if (Key.isDown(Key.UP)) {
ship.dy -= .4;
ship.gotoAndStop("up");
fuel -= 2;
showFuel;
} else if (Key.isDown(Key.LEFT)) {
ship.dx -= .2;
ship.gotoAndStop("left");
fuel -= 1;
showFuel;
} else if (Key.isDown(Key.RIGHT)) {
ship.dy += .2;
ship.gotoAndStop("right");
fuel -= 1;
showFuel;
} else {
// Не включен ни один из ускорителей.
ship.gotoAndStop("normal");
}
}Функция shipMovement
изменяет скорость корабля согласно гравитации и перемещает корабль в зависимости от скорости лунохода.