function shipMovement() {
// Гравитация заставляет корабль двигаться вниз.
ship.dy += gravity;
// Перемещаем корабль.
ship._x += ship.dx;
ship._y += ship.dy;
}
Функция checkForLandпроверяет массив footPoints:находится ли хоть одна опора лунохода внутри клипа «pad». Если там нет ни одной опоры, переменной landedприсваивается значение false. Такое же значение присваивается и в том случае, когда скорость лунохода больше трех единиц, поскольку данная скорость слишком высока для того, чтобы луноход смог совершить посадку. Если после этого значение переменной landedвсе еще равно true, значит, луноход удачно совершил посадку. Все, что теперь необходимо сделать, – перейти к следующему кадру в основной временной шкале и увеличить значение переменной gameLevelна единицу.
function checkForLand() {
// Выясняем, обе ли опоры находятся на посадочной площадке.
landed = true;
for(i=0; i
// Просматриваем все площадки.
footDown = false;
for(j=0; j
// Проверяем, находится ли опора на площадке.
if (pads[j].hitTest(ship._x+footPoints[i].x, ship._y+footPoints[i].y, true)) {
footDown = true;
break;
}
}
// Если опора не находится на площадке,
// значит, корабль не совершил посадку.
if (!footDown) {
landed = false;
break;
}
}
// Проверяем, не слишком ли быстро движется корабль.
if (ship.dy > 3.0) landed = false;
if (landed) {
// Посадка совершена.
gotoAndPlay(_currentFrame+1);
gameLevel++;
}
}
С другой стороны, необходимо проверять, взорвался луноход или нет. В массиве hitPointsсодержится список координат точек вокруг корабля: двух опор, середины каждой стороны, вершины и центра днища. Так как невозможно определить, полностью ли один объект накладывается на другой, вы просто проверяете эти точки. Если какая-то из них оказалась внутри элемента «activeground», тогда корабль разбился. У клипа «Ground – level X» на каждом уровне – имя экземпляра «activeground».
function checkForCrash() {
// Корабль не совершил посадку. Проверяем, коснулся ли он поверхности Луны.
if (!landed) {
// Просматриваем все возможные точки касания.
for(i=0; i
// Проверяем, не коснулся ли корабль поверхности Луны в этой точке.
if (activeground.hitTest(ship._x+hitPoints[i].x, ship._y+hitPoints[i].y, true)) {
ship.gotoAndPlay("explode");
// Уменьшаем количество жизней или завершаем игру.
gotoAndPlay("lost ship");
break;
}
}
}
}
Еще одна полезная функция в этом ролике – showFuel.Она берет клип «meter» и присваивает его свойству _xscale величину fuel.Так как сначала значение переменной fuel(запас горючего) равно 100, а затем уменьшается до 0, его легко использовать для свойства _xscale. Если бы диапазон значений fuelбыл другим, вам бы пришлось сначала преобразовать их так, чтобы они находились в диапазоне от 0 до 100, а лишь затем присваивать их свойству _xscale.
function showFuel() {
gauge.meter._xscale = fuel;
}
...
Совет
Обратите внимание: для того чтобы размеры клипа "meter" уменьшались справа налево, необходимо поместить центр клипа так, чтобы центр прямоугольника располагался справа от него. Если центр клипа окажется слева, то изменение величины _xscale приведет к тому, что объект будет сокращаться к центру, а не справа налево.
К сведению
В этом ролике к каждой кнопке Play прикреплена одна строчка кода. Просмотрите каждый из этих сценариев, чтобы понять, к какому кадру переходит ролик или какая функция вызывается.
Обратите внимание, что во всех трех типах ускорителей использовалась одна и та же анимация – thrust animation. Для левого и правого ускорителей клип поворачивался на 90° или на -90°. Размер анимации боковых ускорителей был уменьшен, так как предполагается, что они слабее основного ускорителя.
Другие возможности
В этой игре очки не начисляются. Вы же можете добавлять очки за каждую успешную посадку, причем за посадку на труднодоступные посадочные площадки начислять больше обычного. Также можно предоставлять премию за скорость и объем неиспользованного топлива. Добавить уровни к игре очень просто, для этого нужно только нарисовать рельеф. Когда вы исчерпаете все свои идеи, попробуйте изменить код таким образом, чтобы на более высоких уровнях с тем же рельефом корабль имел меньше топлива или была более сильная гравитация.
Исходный файл: Platformfla
После первой волны аркадных игр, которая спала где-то в начале 80-х, следующим значительным течением было появление игр типа платформенный скроллер. Этот жанр приобрел широкую популярность после появления серии игр "Mario Bros" от компании Nintendo. В конце 80-х платформенные скроллеры были абсолютным фаворитом среди консольных игр. Игры этого типа продолжают выходить и сегодня.
Читать дальше
Конец ознакомительного отрывка
Купить книгу