Стена и мяч
Оператор *= работает точно так же, как и +=, только он умножает исходное значение переменной на указанное число. То есть если значение а равно 5, строка а *= 3 изменит это значение на 15. Если же записать а *= – 1, значение переменной а станет равным – 5. Воспользовавшись записью *= – 1 можно быстро изменить знак переменной.
function moveBall() { //(1) Изменяем значение переменных х и у. x += dx; y += dy; //(2) Проверяем, достиг ли мяч правой стены, if (x + ballRadius > rightWall) { overshoot = (x + ballRadius) - rightWall; x -= overshoot * 2; dx *= -1; //(3) Проверяем, достиг ли мяч нижней стены, if (y + ballRadius > bottomWall) { overshoot = (y + ballRadius) - bottomWall; y -= overshoot * 2; dy *= -1; //(4) Проверяем, достиг ли мяч верхней стены, if (y - ballRadius < topWall) { overshoot = topWall - (y - ballRadius); y += 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; x += 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 = x; ball._y = y; } } } }По сравнению с функцией moveBall функция movePaddle Поразительно короткая. Все, что необходимо сделать, – присвоить вертикальному положению биты значение вертикальной координаты курсора.
function movePaddle() { // положение биты меняется в соответствии с курсором paddle._y = _ymouse; }К сведению
Убедитесь, что экземпляру клипа с мячом присвоено имя "ball", а экземпляру клипа с битой – "paddle". Если стены расположены не так, как в исходном ролике, проверьте, правильно ли указаны константы в функции initGame.
В основной кадр игры необходимо включить оператор stop, чтобы вставить паузу в основную временную шкалу (это поможет избежать досрочного перехода к кадру окончания игры).
Другие возможности
Игру можно усовершенствовать, если позволить игроку пропустить в течение игры определенное количество мячей. Таким образом, игра не будет заканчиваться после пропуска первого мяча, а продолжится со вторым мячом и т.д.
Осуществить это можно, присвоив, например, в начале игры переменной ballNum значение 3 или какое-либо другое. В результате, если величина ballNvun будет превышать 0, вместо кадра "game over" ролик будет переходить к кадру "ball lost". Игрок может нажать любую клавишу и начать игру заново, но при этом значение ballNum.
