В этом уроке мы будем создавать игру Brick Breaker с нуля, используя Corona SDK. Цель этой игры — управлять понгоподобным веслом, чтобы сбивать мяч со стопки кирпичей, пока они не сломаются.
Где мы остановились. , ,
Если вы еще этого не сделали, пожалуйста, прочитайте часть 1 этой серии, чтобы полностью понять код в этом руководстве.
Шаг 16: Объявления функций
Объявив многомерную таблицу для хранения наших уровней на шаге 15, теперь объявляем все функции, которые будут использоваться в этом приложении:
local addMenuScreen = {} local tweenMS = {} local hideAbout = {} local rmvAbout = {} local addGameScreen = {} local buildLevel = {} local movePaddle = {} local gameListeners = {} local startGame = {} локальное обновление = {} местный отскок = {} local removeBrick = {} локальное оповещение = {} локальный перезапуск = {} local changeLevel = {}
Шаг 17: код конструктора
Теперь создайте Main()
, первую функцию, которая будет вызываться при запуске нашей игры:
локальная функция Main () addMenuScreen () конец
Шаг 18: Добавить экран меню
Следующий фрагмент кода добавляет графику экрана меню на сцену и сохраняет ее в группе menuScreen :
функция addMenuScreen () menuScreen = display.newGroup () mScreen = display.newImage ('mScreen.png') startB = display.newImage ('startB.png') startB.name = 'startB' aboutB = display.newImage ('aboutB.png') aboutB.name = 'aboutB' menuScreen: вставка (mScreen) startB.x = 160 startB.y = 260 menuScreen: вставка (startB) aboutB.x = 160 aboutB.y = 310 menuScreen: вставка (aboutB)
Шаг 19: Кнопочные слушатели
Слушатели добавляются к кнопкам для выполнения функции tweenMS при нажатии:
startB: addEventListener («tap», tweenMS) aboutB: addEventListener ('tap', tweenMS) конец
Шаг 20: вызов о экране
Эта функция проверяет, какая кнопка была нажата, и отображает соответствующий вид:
функция tweenMS: нажмите (e) if (e.target.name == 'startB') тогда -- Начать игру transition.to (menuScreen, {time = 300, y = -menuScreen.height, transition = easing.outExpo, onComplete = addGameScreen}) еще - Позвоните AboutScreen aboutScreen = display.newImage ('aboutScreen.png') transition.from (aboutScreen, {time = 300, x = menuScreen.contentWidth, transition = easing.outExpo}) aboutScreen: addEventListener («нажмите», скрыть о)
Шаг 21: Скрыть кнопки меню
Эти строки, вывод функции tweenMS
сверху, скрывают кнопки экрана меню, чтобы избежать нежелательных нажатий:
startB.isVisible = false; aboutB.isVisible = false; конец конец
Шаг 23: Удалить с экрана
Следующая функция отключает экран около экрана и удаляет его:
функция hideAbout: нажмите (e) transition.to (aboutScreen, {time = 300, x = aboutScreen.width * 2, transition = easing.outExpo, onComplete = rmvAbout}) конец функция rmvAbout () aboutScreen: removeSelf () - Включить кнопки меню startB.isVisible = true; aboutB.isVisible = true; конец
Шаг 24: уничтожить экран меню
Когда пользователь нажимает кнопку запуска, мы начинаем создание игрового экрана. Первое, что нужно сделать, это уничтожить экран меню:
функция addGameScreen () - Уничтожить экран меню menuScreen: removeSelf () menuScreen = ноль
Шаг 25: добавь игровой экран
Далее мы добавляем графику весла и мяча:
- Добавить игровой экран paddle = display.newImage ('paddle.png') ball = display.newImage ('ball.png') paddle.x = 160 paddle.y = 460 ball.x = 160 ball.y = 446 paddle.name = 'paddle' ball.name = 'ball'
Шаг 26: вызов функции уровня сборки
Затем мы строим уровень. Эта функция полностью объяснена позже в статье:
buildLevel (уровни [1])
Шаг 27: Результаты и уровни текста
Последняя графика, которую нужно добавить, относится к тексту партитуры и уровней:
scoreText = display.newText ('Score:', 5, 2, 'akashi', 14) ScoreText: setTextColor (254, 203, 50) scoreNum = display.newText ('0', 54, 2, 'akashi', 14) scoreNum: SetTextColor (254,203,50) levelText = display.newText ('Level:', 260, 2, 'akashi', 14) levelText: setTextColor (254, 203, 50) levelNum = display.newText ('1', 307, 2, 'akashi', 14) levelNum: SetTextColor (254,203,50)
Шаг 28: Запустите слушатель
Слушатель добавляется в фон. Этот слушатель запустит игру, когда коснется фона:
background: addEventListener («нажмите», startGame) конец
Шаг 29: переместить весло
Весло будет управляться с помощью акселерометра устройства. Данные будут получены с использованием e.xGravity и переданы в свойство x весла.
Функция movePaddle: акселерометр (e) - Движение акселерометра paddle.x = display.contentCenterX + (display.contentCenterX * (e.xGravity * 3))
Шаг 30: столкновение границы весла
Чтобы весло не покинуло сцену, мы создаем невидимые границы по сторонам экрана:
if ((paddle.x - paddle.width * 0.5) <0) тогда paddle.x = paddle.width * 0.5 elseif ((paddle.x + paddle.width * 0.5)> display.contentWidth) затем paddle.x = display.contentWidth - paddle.width * 0.5 конец конец
Шаг 31: Функция уровня сборки
Уровни будут построены с помощью этой функции.
Он использует параметр для получения уровня для построения, вычисляет его размер и запускает двойной цикл for, один для высоты и один для ширины. Затем он создает новый экземпляр Brick, который размещается в соответствии с его шириной, высотой и числом, соответствующим i и j . Кирпич объявлен статическим в физическом движке, поскольку он не будет обнаруживать столкновение, которое будет обрабатываться шаром, который является единственным динамическим физическим типом.
Наконец, кирпич добавляется в группу кирпичей для доступа к нему вне этой функции.
функция buildLevel (уровень) - Длина уровня, высота local len = table.maxn (уровень) кирпич: toFront () для я = 1, лен до для j = 1, W_LEN сделать если (уровень [i] [j] == 1), то local brick = display.newImage ('brick.png') brick.name = 'кирпич' brick.x = BRICK_W * j - СМЕЩЕНИЕ brick.y = BRICK_H * я phys.addBody (кирпич, {плотность = 1, трение = 0, отскок = 0}) brick.bodyType = 'статический' bricks.insert (кирпичи, кирпич) конец конец конец конец
Шаг 32: Слушатели игр
Эта функция добавляет или удаляет слушателей. Он использует параметр, чтобы определить, должны ли слушатели быть добавлены или удалены. Обратите внимание, что некоторые строки закомментированы, так как функции для их обработки еще не созданы.
функция gameListeners (действие) if (action == 'add') тогда Время выполнения: addEventListener ('accelerometer', movePaddle) --Runtime: addEventListener ('enterFrame', обновление) paddle: addEventListener ('столкновение', отскок) --ball: addEventListener ('collision', removeBrick) еще Время выполнения: removeEventListener ('accelerometer', movePaddle) --Runtime: removeEventListener ('enterFrame', обновление) paddle: removeEventListener ('столкновение', отскок) --ball: removeEventListener ('collision', removeBrick) конец конец
Шаг 33: Запустите игру
В этой функции мы вызываем функцию gameListeners , которая запускает движение и управление игрой:
Функция startGame: нажмите (e) background: removeEventListener («нажмите», startGame) gameListeners ( 'Добавить') - физика phys.addBody (paddle, {плотность = 1, трение = 0, отскок = 0}) phys.addBody (ball, {плотность = 1, трение = 0, отскок = 0}) paddle.bodyType = 'static' конец
Шаг 34: Столкновение шара весла
Когда мяч попадает на весло, ySpeed
устанавливается в отрицательное значение, чтобы заставить мяч подняться. Мы также проверяем, в какую сторону весла попал мяч, чтобы выбрать сторону, куда он будет двигаться дальше. Столкновение обнаруживается слушателем события столкновения, добавленным в функцию gameListeners
:
функция отказов (е) ySpeed = -5 - Столкновение весла, проверьте, с какой стороны весла попадает мяч, влево, вправо if ((ball.x + ball.width * 0.5) <paddle.x) тогда xSpeed = -5 elseif ((ball.x + ball.width * 0.5)> = paddle.x) затем xSpeed = 5 конец конец - Запустите код Основной()
Следующее в серии
В следующей и последней части серии мы рассмотрим столкновения между кирпичами и стенами, оценки, уровни и последние шаги, которые необходимо предпринять перед выпуском, такие как тестирование приложений, создание начального экрана, добавление значка и, наконец, создание приложение. Оставайтесь с нами для финальной части!