Кнопка «button» при нажатии клавиши Пробел вызывает функцию fire, в которой определяется положение курсора и создается пара новых клипов «point» для пуль. Кроме того, в массив bullets добавляются следующие элементы: исходное положение, конечное положение, пройденное расстояние и имя клипа для каждой пули.
function fire() {
// Определяем положение мыши.
x = _xmouse;
y = _ymouse;
// Создаем левую пулю.
level++;
attachMovie("point","bullet"+level,level);
bullets.push({startx:50, starty:350, destx:x, desty:y,
dist:1.0, clip: "bullet"+level});
// Создаем правую пулю.
level++;
attachMovie("point","bullet"+level,level);
bullets.push({startx:500, starty:350, destx:x, desty:y,dist:1.0, clip: "bullet"+level});
}После того как пуля выпушена, ее движением во всех кадрах управляет функция moveBullets, которая использует массив bullets, чтобы отслеживать путь каждой пули. В каждом кадре значение свойства dist уменьшается на 40 % от своего предыдушего значения. Пуля отображается между своим исходным и конечным положением в зависимости от значения dist. Если это значение равно 1,0, пуля находится в исходном положении, а при 0,0 – в конечном.
Однако когда значение свойства dist становится равным 0,01, считается, что пуля практически закончила свой путь. В этот момент вызывается функция checkForHit, чтобы определить, попадет ли пуля в астероид или нет. Независимо от результата пуля удаляется из массива и ролика.
Эта игра не претендует на трехмерную модель реального пространства. Она, скорее, воссоздает типичную аркадную игру.function moveBullets() {
// Перемещаем все пули.
for (i=bullets.length-1; i>=0; i—) {
// Увеличиваем пройденное расстояние на 40 %.
bullets[i].dist *= .4;
// Если пуля оказалась слишком далеко от астероида, удаляем ее.
if (bullets[i].dist < .01) {
checkForHit(bullets[i].destx, bullets[i].desty);
_root[bullets[i].clip].removeMovieClip();
bullets.splice(i,1);
// Помещаем пулю ближе к цели.
} else {
bullets[i].x = bullets[i].dist*bullets[i].startx + (1.0-bullets[i].dist)* bullets[i].destx;
bullets[i].y = bullets[i].dist*bullets[i].starty + (1.0-bullets[i].dist)* bullets[i].desty;
_root[bullets[i].clip]._x = bullets[i].x;
_root[bullets[i].clip]._y = bullets[i].y;
}
}
}Астероид создан так же, как и пуля. Однако координаты появления и исчезновения астероида выбираются случайно. Стартовая точка находится на расстоянии 25 пикселов по горизонтали и вертикали от центра экрана. Конечная точка отстоит от центра на расстоянии 550 пикселов по горизонтали и 400 по вертикали, что ровно в два раза больше размера рабочего поля. Это означает, что астероид появляется всегда в районе центра экрана, но может финишировать в любой точке вне видимой его области.
function createRock() {
// Задаем случайное положение для астероида.
startx = Math.random()*50+250;
starty = Math.random()*50+175;
// Задаем случайное направление движения.
destx = Math.random()*1100-275;
desty = Math.random()*800-200;
// Добавляем астероид.
level++;
attachMovie("rock","rock"+level,level++);
rocks.push({startx: startx, starty: starty, destx: destx, desty: desty, dist: .01, clip: "rock"+level});
}