91824841

Созданные шары перемещаются на опрелеленное


attachMovie("balloon", nextBalloon);

// Выбираем, с какой стороны

// и с какой скоростью полетит шар.

if (Math.Random()

_root["balloon"+nextBalloon]._x = -30;

dx = int(Math.Random()*3)+3;

} else {

_root["balloon"+nextBalloon]._x = 580;

dx = -int(Math.Random()*3)-3;

// Выбираем высоту.

_root["balloon"+nextBalloon]._y = int(Math.Random()*100)+20;

// Выбираем цвет.

balloonColor = new Color("balloon"+nextBalloon)

r = int(Math.Random()*5)+1;

if (r == 1) {

balloonColor.setTransform({rb:255}) ;

} else if (r == 2) {

balloonColor.setTransform({gb:255}) ;



} else if (r == 3) {

balloonColor.setTransform({bb:255}) ;

} else if (r == 4) {

balloonColor.setTransform({rb:255,gb:255});

} else if (r == 5) {

balloonColor.setTransform({rb:255,bb:255});

}

// Добавляем новый шар.

balloons.push({clip:"balloon"+nextBalloon,d:dx});

// Изменяем значение переменных.

nextBalloon++;

nextBalloonTime = getTimerf) + 2000;

}}
}}

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

Чтобы быстро задать 50-процентную вероятность, лучше использовать фрагмент кода (Math. Random ()

Имейте в виду, что в цикле for функции moveBalloons перечисление осуществляется в обратном порядке: начинается с последнего элемента в массиве balloons и заканчивается 0. Благодаря этому удаление элемента не влияет на остальную часть массива. Предположим, из массива, состоящего из пяти элементов, был удален третий элемент. Тогда четвертый элемент становится третьим, а пятый - четвертым. Если бы вы считали в прямом направлении, вы бы пропустили третий элемент и сразу перешли к четвертому. При счете в обратном порядке такой проблемы не возникает.

Функция moveBalloons проверяет, все ли шары созданы и все ли шары исчезли, что говорит об окончании игры.

function moveBalloons() {



function aimStraw() {

// Определяем разницу координат начала

//и конца линии.

dx = _xmouse - straw._x;

dy = _ymouse - straw._y;

// Вычисляем угол наклона.

strawRadians = Math.atan2(dy,dx);

// Переводим полученное значение в градусы.

strawDegrees = 360*strawRadians/(2*Math.PI);

straw._rotation = strawDegrees;

}

Теперь при запуске пули в массив bullets будет записано больше информации. Чтобы осуществлять перемещение объекта-пули в каждом кадре, нам необходимо знать угол, под которым он был выпущен.
К каждому объекту массива bullets будет добавлен параметр down, описывающий силу гравитации, действующую на пулю. Исходное значение этого параметра - 0.
Для того чтобы пуля вылетала из кончика соломинки, ее координаты должны иметь значение, равное значению координат соломинки плюс 20 пикселов (длина соломинки чуть больше 20 пикселов). Эти пикселы необходимо распределить (найти значения катетов при заданной гипотенузе и у угле) между координатами х и у при помощи функций Math.sin и Math.cos для того, чтобы получить горизонтальную и вертикальную стороны угла.

Функции Math.sin и Math.cos используются здесь для определения горизонтальной и вертикальной сторон угла. Для того чтобы наглядно представить это, возьмем круг, центр которого находится в точке 0,0; крайняя верхняя точка имеет координаты 0, -1(система координат, в которой ось Y направлена вниз); крайняя правая - 1,0. Задав в функции Math.sin любой угол, вы получите координату y этого угла на окружности. Функция Math.cos позволяет вычислить координату х. Таким образом, значение Math, sin (0) будет равно (-1), значение Math.cos (0) - 0, что соответствует координатам 0, -1.
Более важно понять то, что перемещение имеет две составляющие: скорость и угол. Значения расстояний для монитора компьютера не могут быть заданы по диагонали, они задаются только по вертикали и горизонтали. Функции Math, sin и Math.cos позволяют преобразовать значения скорости и угла в расстояние по горизонтали и вертикали.

function shootBullet () {



balloons[i]._x += balloonDirection;

// Смотрим, не достиг ли шарик границы экрана.

if ((balloonDirection > 0) and (balloons[i]._x > 530)) {

newDirection = true;

} else if ((balloonDirection < 0) and (balloons[i]._x < 20)) newDirection = true;

// При столкновении с границой экрана

// шарики опускаются и меняют направление.

if (newDirection) {

balloonDirection *= -1;

for(var i=0;i < balloons.length;i++) {

balloons[i]._y += 3;

//He достигли ли шарики земли?

if (balloons[i-l],_y > 300) {

gotoAndStop("game over");

}

}

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

function checkCollision(bullet) {

// Просматриваем все шарики,

for(j=balloons.length-1;j>=0;j—) {

balloon = balloons[j];

// Смотрим не попала ли пуля в шарик,
if (distance(bullet,balloon) < 10) {

// Удаляем шар из массива,

balloons.splice(j,1);

// Переходим в кадр взрыва шарика,

balloon.gotoAndPlay(2);

// Увеличиваем счет, score += 1;

// Если шаров больше нет - игра заканчивается,

if (balloons.length == 0) {

gotoAndStop("game over");

}

// Возвращаем значение true, так как попали в шарик,

return(true);

}}

// Возвращаем false, поскольку попали в шарик,

return(false);

}


Содержание раздела