91824841

работает точно так же, как


Оператор *= работает точно так же, как и +=, только он умножает исходное значение переменной на указанное число. То есть если значение а равно 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;

}



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 = у;



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.



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".


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