b5ab525c

Создание кода



Создание кода

Для этой игры необходимы лишь три функции (посмотрите исходный файл, Wallball.fla). Все эти три функции будут вызываться в клипе "actions”:

onClipEevent(load) {
_root.initGame();
}
onClipEvent(enterFrame) {
_root.moveBall();
_root.movePaddle () ;
}

Функции находятся в основной временной шкале. Первая функция, initGame, хранит положение мяча в переменных х и у. Указаны значения dx и dy, то есть скорость мяча по вертикали и горизонтали (5 пикселов в кадре каждая). Затем функция initGame устанавливает несколько постоянных, определяющих положение каждой стены. Этой функции передается значение радиуса мяча, которое также используется функцией moveBall. Переменной passedPaddle присваивается значение true после того, как ифок пропустит мяч. При этом надо спрятать курсор, чтобы он не отвлекал внимание игрока.

function initGame() {
// Устанавливаем начальное положение мяча,
х = Ьа11._х;
у = ball._y;
// Указываем начальную скорость,


dx = 5;
dy = 5;
// Устанавливаем значения постоянных.
rightwali = 550;
leftWall = 0;
topWall = 0;
bottomWall = 4 4 0;
ballRadius = ball._width/2 passedPaddle = false;
// Прячем курсор.
Mouse.hide();
}

Функция movePaddle - "рабочая лошадка" этой игры. Сначала она изменяет значение х и у на величину значений dx и dy соответственно, чтобы получить новое положение мяча (1). Затем проверяет, пролетел ли мяч сквозь стену или нет (2).
К радиусу мяча прибавляется значение его положения, чтобы получить точную позицию правого края мяча. Если мяч оказался за стеной, функция movePaddle подсчитывает, как далеко он перелетел, и присваивает это значение переменной overshoot. Затем мяч перемешается назад на расстояние, в два раза превышающее значение overshoot. Направление мяча меняется при умножении dx на -1, таким образом, знак dx меняется на противоположный. Если значение dx до столкновения мяча со стеной было равно 5, то после этого события становится равным -5.
Затем код проверяет, пролетел ли мяч сквозь нижнюю стену или нет (3). Этот фрагмент похож на предыдущий, только вместо х и dx используются величины у и dy.
Фрагмент кода, где проверяется, пролетел ли мяч через верхнюю стену, несколько отличается от уже рассмотренных (4). Для определения положения верхней границы мяча из положения его центра вычитается радиус. Затем величина overshoot рассчитывается как разница между положениями стены и верхней границы мяча.
Для того чтобы определить, ударился ли мяч о биту или нет, сначала код рассчитывает положение правой границы биты (5). Потом, если мяч находится достаточно близко к бите, рассчитываются верхняя и нижняя границы, а затем определяется, пересекаются ли мяч и бита (6).
Если мяч сталкивается с битой, то он ведет себя так же, как и при столкновении со стеной. Однако при этом скорость мяча увеличивается на 5% (7). Если мяч перелетает через стену, совершается только одно действие - переменной passedPaddle присваивается значение true.
Если значение переменной passedPaddle равно true, и мяч находится там, где должна быть левая стена, игра заканчивается (8). Курсор возвращается в исходное положение, и ролик переходит к кадру "game over".
В конце функции moveBall положение мяча устанавливается в соответствии со значениями х и у.

Оператор *= работает точно так же, как и +=, только он умножает исходное значение переменной на указанное число. То есть если значение а равно 5, строка а *= 3 изменит это значение на 15. Если же записать а *= -1, значение переменной а станет равным - 5. Воспользовавшись записью *= - 1 можно быстро изменить знак переменной.

function moveBall() {
(1)// Изменяем значение переменных х и у.
х += dx;
У + = dy;
(2)// Проверяем, достиг ли мяч правой стены,
if (x+ballRadius > rightWall) {
overshoot = (x+ballRadius) - rightWall x -= overshoot*2;
dx *= -1;
(3)// Проверяем, достиг ли мяч нижней стены,
if (y+ballRadius > bottomWall) {
overshoot = (y+ballRadius) - bottomWall;
у -= overshoot*2;
dy *= -1;
(4)// Проверяем, достиг ли мяч верхней стены,
if (y-ballRadius < topWall) {
overshoot = topWall - (y-ballRadius);
у += overshoot*2;
dy *= -1;
(5)// Находится ли мяч там, где должен удариться о биту?
paddleRight = paddle._x+(paddle._width/2);
if ((x-ballRaduis < paddleRight) and passedPaddle) {
(6)/ / Находится ли там бита?
paddleTop = paddle._y-(paddle._height/2);
paddleBottom = paddle._y+(paddle._height/2);
if ((y > paddleTop) and (y < paddleBottom)) {
// Удар о биту.
overshoot = paddleRight х += overshoot*2;
dx *= -1;
(7) // Увеличиваем скорость,
dx *= 1.05; dy *= 1.05;
} else {
// Мяч пропущен, больше ничего проверять не надо.
passedPaddle = true;}}
(8)// Проверяем, находится ли мяч у левой стены,
if ((x-ballRadius < leftWall) and passedPaddle) {
Mouse.show();
GotoAndPLay("game over");}
// Устанавливаем новое положение мяча.
ball._x = х,-ball._y = у; }
}

По сравнению с функцией moveBall функция movePaddle Поразительно короткая. Все, что необходимо сделать, - присвоить вертикальному положению биты значение вертикальной координаты курсора.

function movePaddle() {
// положение биты меняется в соответствии с курсором
paddle._у = _ymouse;
}



Создание кода

В сценарий предыдущего ролика необходимо внести некоторые изменения. Изменить существующие функции и добавить одну новую. Приведем сценарий клипа "actions", который вызывает новую функцию moveComputerPaddle:

onClipEvent(load) {
_root.startLevel();
}
onClipEvent(enterFrame) {
_root.moveBall ();
_root.movePaddle() ;
_root.moveComputerPaddle();
}

Вместо функции startGame в этой игре используется функция startLevel, которая обладает всеми возможностями функции startGame и в дополнение к ним указывает, что мяч будет двигаться в произвольном направлении. Достичь этого можно, определив, что мяч в 50% случаев подается вверх, в 50% случаев - вниз, также в 50% случаев - влево и в 50% случаев - вправо. То есть вы получаете четыре возможных направления движения мяча по диагонали.

function startLevel() {
// Определяем начальное положение мяча,
х = ball._x;
у = ball._y;
// Указываем начальную скорость и одно из четырех
// произвольных направлений по диагонали,
dx = 5;
dy = 5;
if (Math.random() < .5) dx *= -1;
if (Math.random() < .5) dy *= -1;
// Прячем курсор. Mouse.hide();
// Устанавливаем значения констант.
rightWall = 550;
leftWall = 0;
topWall = 0;
bottomWall = 400;
ballRadius = ball._width/2;
passedPaddle = false;
}

Теперь в функцию moveBall включен код для определения, пролетел ли мяч мимо биты компьютера или нет (10). Он похож на код, обрабатывающий биту игрока (9), и идентичен соответствующему фрагменту кода предыдущей игры.
Когда мяч пролетает с правой (11) или с левой (12) стороны, обычно игра возвращается к кадру "start level". Однако если не осталось больше мячей, программа переходит к кадру завершения игры, "game over". В зависимости от того, кто пропустил мяч, очко записывается либо игроку, либо компьютеру (переменной playerScore или computerScore).

function moveBall() {
// Изменяем координаты х и у.
х += dx;
y += dy;
// Проверяем, попал ли мяч в нижнюю стену,
if (y+ballRadius > bottomWall) {
overshoot = (y+ballRadius) - bottomWall;
у -= overshoot*2;
dy *= -1;
}
// Проверяем, попал ли мяч в верхнюю стену, if (y-ballRadius < topWall) {
overshoot = topWall - (y-ballRadius);
у += overshoot*2;
dy *= -1;}

(9) // Находится ли мяч там, где по нему должна ударить бита?

paddleRight = paddle._x+(paddle._width/2);
if ((x-ballRadius < paddleRight) and ipassedPaddle) {
// Находится ли там бита?
paddleTop = paddle._y-(paddle._height/2);
paddleBottom = paddle._y+(paddle._height/2);
if ((y > paddleTop) and (y < paddleBottom)) {
overshoot = paddleRight - (x-ballRadius)
// Удар битой,
x += overshoot*2;
dx += -1;
// Увеличиваем скорость мяча,
dx *= 1.05;
dy *= 1.05;
} else {
// Мяч пропущен, больше ничего не проверяем.
passedPaddle = true;}
}

(10) // Находится ли мяч там,

// где должен столкнуться с битой компьютера?
paddleLeft = computerPaddle._x-(computerPaddle._width/2);
if ((x+ballRadius > paddleLeft) and !passedPaddle) {
// Находится ли тем бита?
paddleTop = computerPaddle._y-(computerPaddle._height/2);
paddleBottom = computerPaddle_>y+
(computeerPaddle._height/2);
if ((y > paddleTop) and (y < paddleBottom)) {
// Удар битой.
oveershoot = (x+ballRadius) - paddleLeft;
x -= overshoot *2; dx *= -1;
// Увеличиваем скорость мяча,
dx *= 1.05;
dy *= 1.05;
} else {
// Мяч пропущен, ничего больше не проверяем.
passedPaddle = true;
}}

(11) // Проверяем, попал ли мяч в левую стену.

if ((x-ballRadius < leftWall) and passedPaddle) {
Mouse.show();
computerScore++;
if (numBalls == 0) {
gotoAndPlay("game over");
} else {
numBalls--;
gotoAndPlayf"start level");}}

(12) // Выполняем аналогичную проверку для правой стены,

if ((x+ballRadius > rightWall) and passedPaddle) {
Mouse.show();
playerScore++;
if (numBalls == 0) {
gotbAndPlay("game over");
} else {
numBalls-;
gotoAndPlay("start level");
// Устанавливаем новое положение мяча.
ball._x = х;
ball._y = у;
}

Функция movePaddle идентична одноименной функции предыдущей игры. Однако необходимо добавить функцию moveComputerPaddle, управляющую правой битой, которая будет перемещать биту только в том случае, если мяч летит вправо. Бита будет перемещаться вверх, если мяч расположен выше нее, и вниз, если ниже.
Скорость передвижения биты устанавливается в начале функции. Чем выше это значение, тем быстрее бита будет реагировать на перемещения мяча.

function moveComputerPaddle() {
// Устанавливаем скорость биты, управляемой компьютером.
moveAmount = 8;
// Выясняем, движется ли мяч в этом направлении,
if (dx > 0) {
// Перемещаем биту вверх.
if (у < computerPaddle._y-moveAmount) {
computerPaddle._y -= moveAmount;
,// Перемещаем биту вниз.
} esle if (у > computerPaddle._y+moveAmount) {
computerPaddle._y += moveAmount;
}}}

Еще один важный фрагмент кода входит в кадр "start game" и устанавливает исходные значения количества мячей и очков. Эти переменные не могут быть вставлены в функцию startLevel, так как они должны быть установлены только в начале игры, а не перед тем, как подается мяч.

numBalls = 7;
computerScore = 0;
playerScore = 0;
stop();





Создание кода

Прежде чем будет запушен кадр игры, в кадре "start game" необходимо определить две важные переменные: начальную скорость движения мяча по вертикали и количество мячей, которые могут быть поданы.

dy = 3;
numBalls = 3;
stop() ;

Когда происходит переход к кадру "play", с помощью клипа "actions» можно регулярно вызывать функции. В данной игре все столкновения с мячом или стенами должны быть учтены в функции moveBall, но для блоков была создана отдельная функция - checkCollisions.

onClipEvent(load) {
_root.startBall();
onClipEvent(enterFrame) {
_root.moveBall();
_root.movePaddle();
_root.checkCollisions();
}

Когда начинается кадр "play", подается мяч. Положение мяча определяется тем, где он появляется на рабочем поле. Скорость мяча по горизонтали всегда равна 3, направление движения - вправо. Скорость по вертикали указывается в первом кадре, где величине dy было присвоено значение 3. Однако это значение изменится перед следующим уровнем.
Вдобавок к параметрам мяча воспользуйтесь возможностью и установите некоторые значения, которые не будут изменяться во время игры.

function startBall() {
// Определяем начальное положение мяча,
х = ball._x;
у = ball._y;
// Устанавливаем начальную скорость по горизонтали,
dx = 3;
// Прячем курсор.
Mouse.hide();
// Задаем значения констант.
rightWall = 550;
leftWall = 0;
topWall = 0;
bottomWall = 400;
ballRadius = ball,_width/2;
paddleTop = paddle._y-paddle._height/2;
paddleBottom = paddle._y+paddle.__height/2;
}

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

// Бита следует за курсором,
function movePaddle() {
paddle._x = _xmouse;
}

Следующая функция покажется вам знакомой, так как она очень похожа на функцию moveBall, которая используется в других играх этой главы. Однако есть и некоторые отличия.
Для того чтобы узнать, ударился ли мяч о биту, код проверяет, полностью ли они перекрываются (13). Затем, если все-таки столкновение произошло, скорость мяча по горизонтали определяется тем, где именно мяч ударился о биту (14). К тому же код для определения, пропущен ли мяч, проще, так как он просто проверяет, пролетел ли мяч сквозь нижнюю стену или нет (15).

function moveBall() {
// Изменяем горизонтальное и вертикальное положение мяча.
х += dx;
У += dy;
// Проверяем, находится ли мяч у правой стены,
if (x+ballRadius > rightWall) { overshoot = (x+ballRadius) - rightWall;
x -= overshoot*2;
dx *= -1;
// Проверяем, находится ли мяч у левой стены.
if (x-ballRadius < leftWall) {
overshott = leftWall - (x-ballRadius);
x += overshoot*2;
dx *= -1;
// Проверяем, находится ли мяч у верхней стены,
if (y-ballRadius < topWall) {
overshoot = topWall - (y-ballRadius);
у += overshoot*2;
dy *= -1;
(13)// Находится ли мяч там, где должен удариться о биту?
if ((y+ballRadius > paddleTop) and (y-ballRadius < paddleBottom)) {
// Находится ли там бита?
paddleLeft = paddle._x-(paddle._width/2);
paddleRight = paddle._x+(paddle._width/2);
if ((x+ballRadius > paddleLeft) and (x-ballRadius < paddleRight)) {
// Удар о биту.
overshoot = paddleTop- (y+ballRadius);
у += overshoot*2;
dy *= -1;
(14) // Указываем горизонтальную скорость мяча
//в зависимости от места соприкосновения мяча и биты.
dx = (ball._x - paddle._x)/4;
} else {
// Мяч пролетел мимо биты
passedPaddle = true;
(15) // Проверяем, пролетел ли мяч мимо биты.
if (у > bottomWall) {
Mouse.show() ;
if (numBalls == 0) {
// Больше мячей нет, конец игры.
gotoAndPlay("game over");
} else {
// Еще остался мяч.
numBalls--;
gotoAndPlay("start ball");
}
} // Определяем расположение мяча,
ball._x = х;
ball._y = у;
}

Для того чтобы узнать, ударил ли мяч по блоку, код проверяет все 55 блоков. Блок с горизонтальным положением равным -1000 пикселов уже был сбит, такие блоки игнорируются. В противном случае вызывается функция brickHits, чтобы определить, перекрываются ли мяч и блок. Если да, то блок удаляется, а мяч отталкивается от него.
Обратите внимание на переменную leveldone. Изначально ее значение равно true, но оно изменяется на false, как только встречается блок, который не был сбит. Если значение переменной leveldone все еще остается истинным после того, как были использованы все мячи, игроку удалось удалить все блоки. Игра переходит к кадру "start level", но прежде увеличивается скорость мяча по вертикали, то есть переменная dy.

Необходимо проверить, превышает ли скорость мяча по вертикали значение 7, если да, то нужно снова присвоить ей значение 7. Это вызвано тем, что блоки имеют 8 пикселов в высоту. Если скорость мяча будет равна 8 пикселям или более, тогда мяч будет перелетать через блоки, не выбивая их. К. счастью, скорость, равная 7, и так слишком велика - даже хороший игрок долго не продержится.

function checkCollisions() {
// Определяем границы мяча. ballTop = ball._y - ball._height/2;
ballBottom = ball._y + ball._height/2;
ballLeft = ball._x - ball._width/2;
ballRight = ball._x + ball._width/2;
// Допускаем, что уровень пройден,
leveldone = true;
// Выясняем, ударил ли мяч по блоку,
for (i = l; i < = 55 ; i + +)
{ brick = _root["a" + i] ;
// Проверяем, есть пи еще блоки вокруг,
if (brick._х о -1000) {
if (brickHit(brick)) {
// Если по блоку ударили,
// его нужно удалить с экрана.
brick._х = -1000;
// Изменяем направление движения мяча,
dy *= -1;
} else {
// Блоки еще остались, так что уровень
//не закончен,
leveldone = false;
}}
} // Все ли блоки уже выбиты?
if (leveldone) {
// Начать новый уровень.
Mouse.show();
gotoAndPlay("start level");
// Увеличиваем скорость движения мяча по вертикали.
dy += 1;
if (dy > 7) dy=7;
}
}

Обратите внимание, что в функции hitBrick находятся четыре вложенных оператора if. Возможно, вам будет интересно, почему не написать четыре условия в линию, соединив их оператором AND. Дело в скорости. С вложенными операторами if, если одно из условий оказалось ложным, программа не будет проверять остальные. Таким образом, значительно сократится объем работы, которую выполняет программа, и скорость игры увеличится. С операторами AND программе Flash придется проверять все четыре условия, даже если первое из них ложное.

Функция hitBrick проверяет все четыре стороны мяча по отношению ко всем четырем сторонам блока, чтобы узнать, перекрывает ли мяч один из них. Функция возвращает значение либо true, либо false.

function brickHit(brick) {
// Проверяем, попал ли мяч по блоку.
if (ballTop if (ballBottom >= brick._y - brick._height/2) {
if (ballRight >= brick._x - brick._width/2) {
if (ballLeft // Все условия верны, то есть мяч
// столкнулся с блоком,
return(true);
}}}} // Мяч не столкнулся с блоком,
return(false);
}





Создание кода

Код состоит в основном из функций, расположенных во втором кадре. Первая начинает игру. Вместо отдельных переменных для хранения х, у и z значений мяча, мы используем один объект, ballpos, который имеет о свойства. Таким образом, ballpos .x соответствует x-положению мяча. То же самое мы делаем для ballvel, где содержатся х, у и z скорости мяча.
В начале игры значения свойств объекта bollpos устанавливаются таким образом, чтобы мяч начинал свое движение от задней стенки параллелепипеда. Значения объекта ballvel задают начальное движение мяча строго вдоль оси Oz и скорость на единицу большую номера уровня игры (то есть 2).
Следующая часть функции initGame создает 16 блоков из одного библиотечного образца и покрывает ими всю заднюю стенку. В заключении функции мы устанавливаем уровень биты и шара так, чтобы они были расположены поверх созданных кирпичей.

function initGame() {
// Устанавливаем мяч.
ballpos = {х:200, у:200, z:140};
// Определяем его скорость.
ballvel = {х:0, у:0, z:-(1+gameLevel)};
// Создаем блоки,
bricks = new Array();
for(var x=0;x for(var y=0;y brick = attachMovie("brick","brick"+x+y,x+y*4);
brick._x = 155+30*x;
brick._y = 155+30*y;
bricks.push(brick);
// Перемещаем биту и шар на передний план.
paddle.swapDepths(101);
ball.swapDepths(100);
}

Клип "actions" вызывает всего две функции.

onClipEvent(enterFrame) {
_root.movePaddle();
_root.moveBall(); }


Первая из этих функций, movePaddle, очень простая. Она устанавливает биту в позицию курсора.

function movPaddle() {
//Положение биты соответствует положению курсора.
Paddle._x=_root._xmouse;
Paddle._y=_root._ymouse;
}

А вот функция moveBall выполняет очень много действий. Вначале переопределяются координаты мяча (объект ballpos) с помощью значений объекта ballvel (16).
Затем вычисляется положение мяча на экране (17). Координата х определяется как значение ballpos. х, подкорректированное в соответствии со значением ballpos.z. Чем глубже находится шар, тем большую величину составляет поправка. Второй множитель поправки определяется тем, насколько далеко находится шар от стенок колодца. Если, например, шар находится ровно посередине между стенкой и центральной осью, то есть ballpos.х = 100 или (-100), то поправка будет равняться значению ballpos.z (ballpos.z соответственно). Если вы не вполне поняли логику этих рассуждений, попробуйте поменять различные параметры объекта bollpos и посмотрите на результат.
Следующий фрагмент кода устанавливает значение масштаба шара в соответствие со значением ballpos.z (18). Поскольку максимальное значение ballpos.z составляет 140, то минимальный масштаб составляет (200-140)/2, то есть 35%.
Далее мы устанавливаем масштаб клипа "ring" (19). Этот клип выполняет роль указателя, помогающего понять, на какой глубине находится шар в данный момент.
Если шар сталкивается с одной из стен параллелепипеда (20), происходит отражение от стенки. Проверка выполняется для всех четырех стен.
Столкновение с задней стенкой (21) обрабатывается несколько сложнее. Значение z меняется на противоположное. Кроме того, клипы блоков проверяют, куда именно врезался шар. Блок, с которым произошло столкновение, удаляется, и счет увеличивается.
Передней стенки у нас нет, но на ее месте располагается бита. Если параметр z принимает значение 0, клип биты проверяет, попал ли в него? шар (22). Бита имеет размер 70x70, так что шар должен находиться не далее чем в 35 пикселях по каждой из координат от центра биты. При столкновении определяются новые значения скорости шара в соответствии с расстоянием от центра биты до места столкновения (23). При столкновении строго по центру шар отражается отвесно, тогда как отражение, например, от левой стороны отклоняет мяч влево и т.д.
При столкновении с битой ее параметр _alpha на мгновение принимает значение 90 (24). В следующем кадре значение восстанавливается (26).
Если шар пролетает мимо биты, игра заканчивается (25). Если же все блоки оказываются выбиты, игрок переходит на следующий уровень.

function moveBall() {

(16)// Определяем пространственные координаты шара.

ballpos.х += ballvel.x;
ballpos.у += ballvel.у;
ballpos.z += ballvel.z;

(17) // Определяем плоские координаты.

ball._x = ballpos.x + ballpos.z*(200-ballpos.x)/200;
ball._y = ballpos.у + ballpos.z*(200-ballpos.у)/200;

(18) // Корректируем размер шара.

ball._xscale = (200-ballpos.z)/2;
ball._yscale = (200-ballpos.z)/2;

(19) // Определяем размер рамки.

ring._xscale = (200-ballpos.z)/2;
ring._yscale = (200-ballpos.z)/2;

(20) // Проверяем столкновения со стенками,

if (ballpos.x > 400) ballvel.x *= -1;
if (ballpos.x < 0) ballvel.x *= -1;
if (ballpos.у > 400) ballvel.у *= -1;
if (ballpos.у < 0) ballvel.у *= -1;

(21) // Столкновение с задней стеной,

if (ballpos.z > 140) {
// Меняем направление вдоль
Oz. ballvel.z *= -1;
// Удаляем выбитые шары.
for(var i=bricks.length-1;i>=0;i--) {
if (bricks[i].hitTest(ball._x,ball._y)) {
bricks[i].removeMovieClipt);
bricks.splice(i,1);
score++;}}}

(22) // Столкновение с битой.

if (ballnos.z < 0) {
// Расстояние до центра биты,
рх = ballpos.x-paddle._x;
ру = ballpos.y-paddle._y;
// Столкновение происходит, если расположение от шара
//до центра биты не более 35 пикселов.
if ((Math.abs(px) < 35) and (Math.abs(ру) < 35)) {

(23) // Корректируем скорости по х и по у.

ballvel.x = рх/7; ballvel.y = ру/7;

(24) //Отмечаем столкновение изменением прозрачности биты.

paddle._alpha = 90;
} else {

(25) // Мяч пропущен.

removeBallAndPaddle();
gotoAndStop("game over");
// Меняем направление мяча вдоль Oz.
ballvel.z *= -1;
} else {

(26) // Возвращаем бите прежнюю прозрачность,
paddle._alpha = 50;

(27)// Смотрим, все ли блоки выбиты,

if (bricks.length < 1) {
gameLevel++;
removeBallAndPaddle();
gotoAndStop("level over");
}}
}

Вот еще два полезных фрагмента кода. Первый удаляет шар и биту. Если этого не сделать, они так и будут висеть, как в кадре "game over" так и в кадре "level over".

function rernoveBallAndPaddle (){
paddle.removeMovieClip();
ball.removeMovieClip(); }

Ну а следующая функция, removeBricks, удаляет блоки из этих же кадров. Вызывается при нажатии соответствующих кнопок.

function removeBricks() {
for(var i=0;i bricks[i].removeMovieClip();
}}

Первый кадр ролика - "start" - присваивает переменной gameLevel значение 1 и останавливает ролик.

gameLevel=1;
stop();

Чтобы перейти к следующему кадру, надо нажать кнопку. Вот ее код.

on (press) {
GotoAndStop("Play");
}

Все функции, которые мы рассмотрели, находятся в кадре "Play". Еще там есть команда, вызывающая функцию initGame. Когда уровень пройден, игра переходит к кадру "level over". Так как клип "action" находится в другом кадре, то все шары автоматически останавливаются. При нажатии единственной в этом кадре кнопки все блоки удаляются, и функция initGame может расставить их заново при переходе на следующий уровень.

on (press) {
removeBricks();
gotoAndStop("Play");
}

При нажатии кнопки в кадре "game over" блоки тоже удаляются, но игра переходит к кадру "start".

on (press) {
removeBricks();
gotoAndStop("Start");



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