Написання своєї першої гри на Android за допомогою SDK Corona

Автор: Randy Alexander
Дата Створення: 1 Квітень 2021
Дата Оновлення: 26 Червень 2024
Anonim
Написання своєї першої гри на Android за допомогою SDK Corona - Додатки
Написання своєї першої гри на Android за допомогою SDK Corona - Додатки

Зміст


Найпопулярнішою категорією в Google Play Store завжди були Ігри. Хоча ми, напевно, використовуємо ключові додатки для продуктивності, такі як веб-браузер, клієнт електронної пошти та додаток для обміну миттєвими повідомленнями, ігри все ще залишаються важливою частиною мобільного досвіду. Тож не дивно, що багато людей, які хочуть навчитися розвиватися для Android, хочуть почати з гри. Крім того, будемо чесними, написання гри - це цілий набір веселіше, ніж розробка програми для підвищення продуктивності!

Офіційною мовою Android є Java, а офіційним середовищем розробки є Android Studio. Якщо ви хочете заглянути в Java, то я пропоную наш підручник з основ Java, а якщо ви хочете навчитися писати додаток за допомогою Android Studio, то пропоную вам ознайомитись з нашим підручником щодо написання свого першого додатка для Android. Однак Java та Android студії - не єдині способи розвитку Android. Огляд доступних мов та SDK можна знайти в нашому посібнику: Я хочу розробити програми для Android - Які мови я повинен вивчити?


Однією з SDK, згаданих у посібнику з мов програмування, є Corona, сторона SDK, призначена головним чином для написання ігор. Замість Java, Corona використовує Lua - швидку мову сценаріїв, яку легко вивчити, але потужно. Однак Corona - це не єдиний SDK для мобільних ігор, який використовує Lua. Іншими відомими прикладами є Cocos2d-X, Marmalade та Gideros.

Завантажте та встановіть

Щоб розпочати роботу з Corona, вам потрібно буде завантажити та встановити SDK. Перейдіть на веб-сайт Corona і натисніть кнопку для завантаження. Вам потрібно буде створити обліковий запис (який безкоштовно), перш ніж ви зможете завантажити комплект. Якщо ви хочете створити фактичний файл .apk, а не просто запустити програму в емуляторі, вам потрібно буде встановити Java 7, однак вам не потрібно буде встановлювати Android SDK. Щоб встановити комплект розробки Java 7, перейдіть на веб-сайт Oracle, знайдіть розділ під назвою «Java SE Development Kit 7u79» та завантажте версію для свого ПК.


Після встановлення Corona вам потрібно активувати її. Це разовий процес, який є безкоштовним. Запустіть симулятор Corona і погоджуйтесь на отримання ліцензії. Введіть адресу електронної пошти та пароль, які ви використали для завантаження, і натисніть Увійти.

Початок проекту

Зсередини Corona Simulator натисніть «Новий проект». Введіть назву програми у поле «Ім'я програми:» та залиште інші параметри за замовчуванням. Натисніть «ОК».

Зараз з’являться три вікна. Перші два - симулятор корони та модульний вихід корони. Corona також відкриє вікно провідника файлів із зазначенням файлів для вашого проекту.

Більшість файлів (близько 23) в каталозі проекту призначені для значка програми! Найважливіший файл для нас зараз main.lua, оскільки тут ми напишемо код для нашої програми.

Вступ до Луї

Перш ніж ми вступимо в написання коду, нам потрібно здійснити екскурсію зі свистом по Луа. Інтерпретатор Lua (пам’ятайте, це мова сценаріїв, а не компільована мова) доступний для Windows, OS X та Linux. Однак він вбудований в Corona, тому в цей час вам не потрібно встановлювати нічого зайвого. Найпростіший спосіб пограти з Lua - використовувати онлайн-демонстрацію.

Ви можете знайти багато хороших навчальних посібників про Луа в Інтернеті, і вам слід ознайомитись з посібником по програмі Луа, програмуванням у Луї, навчальному посібнику The.Lua, та підручником Point Lua.

Ось невеличка програма Lua, яка покаже вам деякі ключові особливості Lua:

локальна функція doubleIt (x) повернути x * 2 кінець для i = 1,10,1 do x = doubleIt (i), якщо (x == 10), тоді друкувати ("десять"), друкувати (doubleIt (i)) кінцевий кінець

У наведеному вище коді показано три важливі конструкції Lua: функції, цикли та оператори if. Функція doubleIt () дуже простий, він просто подвоює переданий параметр х.

Основний код - для цикл від 1 до 10. Він дзвонить doubleIt () для кожної ітерації. Якщо значення повернення дорівнює 10 (тобто коли i є 5) тоді код видає "десять", інакше він просто виводить результат doubleIt ().

Якщо у вас є досвід кодування, то приклад коду повинен бути досить простим. Якщо ви хочете вивчити деякі основні програми, то я пропоную вам скористатися деякими з вищезгаданих ресурсів, щоб відточити свої навички.

Написання гри

Написати основні програми в Короні просто. Вам потрібно потурбуватися лише одним файлом, main.lua, і нехай Корона виконує всі важкі підйоми. Гра, яку ми будемо писати, - це проста гра "натискання". Повітряна куля або бомба не вийде з екрана. Якщо гравець натискає на повітряну кулю, він набирає очко, натискає на бомбу, тоді рахунок ділиться на 2, як пенальті. Щоб написати код, вам потрібно відредагувати main.lua. Це можна зробити в будь-якому текстовому редакторі.

Corona SDK має вбудований 2D двигун фізики, що робить побудувати ігри дуже просто. Перший крок у написанні гри - ініціалізація двигуна фізики:

локальна фізика = вимагати ("фізику") фізику.старт ()

Код досить зрозумілий. Фізика модуля завантажується та ініціалізується, вона присвоюється змінній фізика. Щоб включити двигунphysics.start () називається.

Далі ми створюємо кілька корисних змінних, які будуть корисні не тільки для цієї простої гри, але і для більш складних ігор. половина Вт і півгодини утримуйте значення для половини ширини екрана та половини висоти екрана:

половинаW = display.contentWidth * 0,5 половинаH = display.contentHeight * 0,5

The показ об'єкт - це заздалегідь визначений об'єкт, який Корона робить доступним у всьому світі.

Тепер настає перший крок, який насправді робить щось на екрані:

локальний bkg = display.newImage ("night_sky.png", половина W, половина H)

А також властивості на кшталт contentHeight і contentWidth, the показ Об'єкт також має багато корисних функцій. The newImage () Функція зчитує файл зображення (у цьому випадку .png) та виводить його на екран. Об'єкти відображення відображаються шарами, тому, що це перше зображення, яке ми ставимо на екран, то воно завжди буде фоном (якщо код явно не робить щось, щоб це змінити). Параметри половина Вт і півгодини скажіть Короні розмістити зображення в середині.

У цей момент ви можете запустити код в емуляторі і переглянути фонове зображення. Якщо ви збережете файл, то емулятор помітить, що файл змінився, і запропонує відновити його. Якщо цього не сталося, використовуйте File-> Reunch.

Оскільки користувач набере очки за натискання на повітряні кулі, нам потрібно ініціалізувати змінну балів і відобразити бал на екрані:

оцінка = 0 scoreText = display.newText (оцінка, половинаW, 10)

Оцінка буде зберігатися в образно названій змінній оцінка,і scoreText - це об'єкт, на якому відображається оцінка. Подібно до newImage (), newText () покласти щось на екран, у цьому випадку текст. З тих пір scoreText є глобальною змінною, тоді ми можемо змінити текст у будь-якій точці. Але ми до цього дійдемо незабаром.

Ви можете перезапустити емулятор і побачити показ 0 балів у верхній частині екрана.

Зліва: просто фон. Праворуч: передумови та оцінка.

Тепер виходить щось трохи складніше, але не хвилюйтесь, я поясню це по черзі:

локальна функція balloonTouched (подія), якщо (event.phase == "розпочато"), то час виконання: deleteEventListener ("enterFrame", event.self) event.target:removeSelf () оцінка = оцінка + 1 scoreText.text = оцінка в кінці

Код вище визначає функцію, яку називають повітряна куля який буде називатися щоразу, коли постукує повітряна куля. Ми ще не говорили Короні викликати цю функцію кожного разу, коли натискає куля, вона прийде пізніше, але коли ми це зробимо, це функція, яка викликається.

Події "Торкніться чи торкніться" мають кілька етапів, багато з яких підтримують перетягування. Користувач кладе палець на предмет, це фаза "почалася". Якщо вони ковзають пальцем у будь-якому напрямку, це фаза "переміщення". Коли користувач піднімає палець з екрану, це фаза, що закінчилася.

Перший рядок о повітряна куля ми перевіряємо, що ми перебуваємо на фазі "почалася" Ми хочемо зняти кулю і збільшити кількість балів якомога швидше. Якщо функція знову викликається для інших фаз, таких як "закінчився", функція нічого не робить.

Всерединіякщо оператор - це чотири рядки коду. Розглянемо спочатку два останніх, оскільки вони простіші.оцінка = оцінка + 1 просто збільшує рахунок на один іscoreText.text = оцінка змінює текст оцінки на екрані, щоб відображати нову оцінку. Пригадайте, як я це сказавscoreText було глобальним і до нього можна було отримати доступ де завгодно. Ну, це те, що ми робимо тут.

Тепер про перші два рядки. Після того, як повітряна куля або бомба потрапляє в нижню частину екрана, вона все ще існує в пам’яті програми, ви просто не можете її бачити. У міру просування гри кількість цих позаекранних об'єктів буде постійно збільшуватися. Тому нам потрібен механізм, який видаляє об'єкти, коли вони не видно. Ми робимо це у функції, що називаєтьсяекрані, про які ми ще не написали. Ця функція буде викликана один раз на кадр під час гри. Після натискання на кульку нам потрібно видалити її та видалити виклик, який перевіряє, чи повітряна куля вийшла за межі екрана.

Лініяevent.target:removeSelf () видаляє кулю. Коли відбувається подія дотику, одним з параметрів функції слухача єподія параметр. Він повідомляє функцію про подію та тип події, наприклад,подія.фаза. Це також говорить нам, яку повітряну кулю було постукано,event.target. TheremoveSelf () Функція виконує те, що вона каже, що робить, видаляє об'єкт (у цьому випадку повітряна куля).

Рядок перед цим видаляє слухача "enterframe", який є функцією, яку називають кожним кадром, щоб побачити, чи не впала куля внизу екрана. Ми розглянемо це більш детально, коли прийдемо писатиекрані функція слухача.

Отже, резюмувати.повітряна куляперевіряє, що це початок сенсорної послідовності. Потім він видаляє прослуховувач "enterframe", який є функцією, яку викликають кожен кадр, щоб побачити, чи повітряна куля впала внизу екрана. Потім він видаляє повітряну кулю, збільшує рахунок і відображає нову оцінку.

Це було для повітряних куль, тепер нам потрібно щось подібне для бомб:

локальна функція bombTouched (подія), якщо (event.phase == "розпочато"), то Runtime: removeEventListener ("enterFrame", event.self) event.target:removeSelf () score = math.floor (оцінка * 0,5) scoreText.text = оцінка кінця кінця

Як ви бачите, код дуже схожий за винятком того, що замість того, щоб збільшувати бал, оцінка множиться на 0,5 (тобто ділиться на 2). The математичний поверх () функція округляє рахунок до найближчого цілого числа. Тож якби гравець мав оцінку 3 і вбив бомбу, то новий рахунок був би 1, а не 1,5.

Я згадав про поза екраном () функціонувати раніше. Ця функція буде викликана кожним кадром, щоб перевірити, чи не вийшов об'єкт із екрана. Ось код:

локальна функція за межі екрана (self, подія) if (self.y == nil), тоді повернути кінець if (self.y> display.contentHeight + 50), то Runtime: removeEventListener ("enterFrame", self) self: removeSelf () end end

В обчислювальній ситуації існує ситуація, відома як умова гонки. Тут відбудуться дві речі, але одна може статися першою, а іноді й іншою. Це гонка. Деякі умови перегонів небачені, тому що одне завжди здається першим, але вони можуть викликати цікаві помилки в той день, за правильних умов, інше відбувається спочатку, а потім система ламається!

У цій простій грі є умова гонки, оскільки дві речі можуть статися дуже близько одна від одної: повітряна куля та її поза екраном () Функція викликається, щоб побачити, чи повітряна куля зійшла з екрана. Результатом є те, що код для видалення повітряної кулі можна викликати, а потім - поза екраном () функція викликається (що відбувається як 30 разів на секунду). Щоб обійти цю дивну послідовність подій поза екраном () Функція повинна перевірити, чи є у значення об'єкта нуль (null) чи ні. Якщо це нуль то це означає, що об’єкт уже видалено, тому рухайтеся далі, це не дроїди, яких ми шукаємо.

Якщо об’єкт все ще відтворюється, перевірте його положення, якщо він пішов 50 пікселів з екрана, тоді видаліть його та видаліть слухача, щоб поза екраном () Функція знову не буде викликана для цього об’єкта. Код, щоб переконатися в цьомупоза екраном () називається кожен кадр є частиною наступного розділу коду.

Вся передумова цієї гри полягає в тому, що нові повітряні кулі або бомби будуть продовжувати падати на екран. Тому нам потрібна функція, яка створить або нову кулю, або нову бомбу:

локальна функція addNewBalloonOrBomb () локальний startX = math.random (display.contentWidth * 0,1, display.contentWidth * 0,9), якщо (math.random (1,5) == 1), тоді - BOMB! локальна бомба = display.newImage ("bomb.png", startX, -300) physics.addBody (бомба) bomb.enterFrame = дисплей Час виконання: addEventListener ("enterFrame", бомба) bom: addEventListener ("touch", bombTouched) ще - Повітряна куля на повітряній кулі = display.newImage ("red_balloon.png", startX, -300) physics.addBody (повітряна куля) balloon.enterFrame = offscreen Час виконання: addEventListener ("enterFrame", балон) повітряна куля: addEventListener ("touch", balloonTouched) кінцевий кінець

Перший рядок функції визначає, куди впаде повітряна куля х площині. Якщо повітряна куля або бомба завжди падали посередині, це буде не дуже цікаво! ТакstartX - випадкове число від 10 відсотків до 90 відсотків ширини екрана.

Далі вибирається випадкове число між 1 і 5.Якщо число 1, то бомба буде скинута. Якщо це 2, 3, 4 або 5, тоді повітряна куля буде скинута. Це означає, що бомби будуть скидатися приблизно в 20 відсотків часу.

Код бомби та кулі досить схожий. Спочатку зображення (або бомба, або повітряна куля) відображається за допомогоюновий малюнок(). Його х позиція такаstartX в той час як його у положення встановлюється на -300, тобто вгорі екрана. Причиною тому є те, що ми хочемо, щоб об'єкт впав з-за меж екрану у видиму область, а потім знизу. Оскільки ми використовуємо 2D-фізичний двигун, добре дати об'єкту трохи початкової відстані, щоб впасти, щоб він міг набрати деяку швидкість.

Заклик доphysics.addBody () приймає завантажене зображення newImage () і перетворює його на об'єкт у двигуні фізики. Це дуже потужно. Будь-який файл зображення може бути перетворений у тіло, яке реагує на гравітацію та зіткнення лише зателефонувавшиphysics.addBody ().

Останні три рядки коду бомби або кулі налаштовували слухачів. НалаштуванняenterFrame властивість повідомляє Короні, до якої функції потрібно викликати кожен кадр і на який дзвінокВиконання: addEventListener () встановлює його. Нарешті, заклик доповітряна куля: addEventListener () повідомляє Короні, яку функцію викликати, якщо торкнутися бомби чи повітряної кулі.

І тепер гра майже завершена. Нам просто потрібні ще два рядки коду:

addNewBalloonOrBomb () timer.performWithDelay (500, addNewBalloonOrBomb, 0)

Перший рядок робить першу бомбу чи повітряну кулю падінням, чітко закликаючиaddNewBalloonOrBomb (). Другий рядок встановлює таймер, який буде викликатиaddNewBalloonOrBomb () кожні півсекунди (500 мілісекунд). Це означає, що нова повітряна куля чи бомба падатиме кожні півсекунди.

Тепер ви можете запустити гру в емуляторі.

Ось повний список для main.lua, повний вихідний код проекту для цієї гри можна знайти тут, на GitHub.

-------------------------------------------------- --------------------------------------- - - Падіння гра на повітряній кулі та бомбі - Автор Gary Sims для - ------------------------------------------- ---------------------------------------------- - Почніть Фізичний двигун локальної фізики = вимагають ("фізика") фізика.старт () - Обчисліть половину ширини екрана та висоти половини Вт = дисплей.Контент ширини * 0,5 половини В = дисплей. Зміст Висота * 0,5 - Встановіть місцевий фон bkg = display.newImage ("night_sky.png", halfW, halfH) - Оцінка балу = 0 scoreText = display.newText (оцінка, половинаW, 10) - Викликається при натисканні гравцем на повітряну кулю - Збільшити бал на 1 місцеву функцію balloonTouched ( подія), якщо (event.phase == "розпочато"), то Runtime: removeEventListener ("enterFrame", event.self) event.target:removeSelf () оцінка = оцінка + 1 scoreText.text = кінцевий результат - Викликається, коли Гравець натискає на бомбу - Половина балу як певна локальна функція bombTouched (подія) if (event.phase == "розпочато"), тоді Виконання: deleteEventListener ("enterFrame", event.self) event.target:removeSelf () оцінка = math.floor (оцінка * 0,5) scoreText.text = кінцевий результат - видаліть об'єкти, які випали з внизу екрана локальна функція на екрані (self, event) if (self.y == nil), тоді повертається end if (self.y> display.contentHeight + 50), то Runtime: removeEventListener ("enterFrame", self) self: removeSelf () кінцевий кінець - Додайте нову локальну функцію повітряної кулі або бомби addNewBalloonOrBomb () - Ви можете знайти red_ballon.png і bomb.png в локальному репортажі GitHub startX = math.random (display.contentWidth * 0.1, display.contentWidth * 0,9) якщо (math.random (1,5) == 1), то - BOMB! локальна бомба = display.newImage ("bomb.png", startX, -300) physics.addBody (бомба) bomb.enterFrame = дисплей Час виконання: addEventListener ("enterFrame", бомба) bom: addEventListener ("touch", bombTouched) ще - Повітряна куля на повітряній кулі = display.newImage ("red_balloon.png", startX, -300) physics.addBody (повітряна куля) balloon.enterFrame = offscreen Час виконання: addEventListener ("enterFrame", балон) балон: addEventListener ("touch", balloonTouched) end end - додайте нову кулю або бомбу тепер addNewBalloonOrBomb () - продовжуйте додавати нову кулю або бомбу кожні 0,5 секунди timer.performWithDelay (500, addNewBalloonOrBomb, 0)

Наступні кроки

Наступний крок - грати в гру на справжньому пристрої Android. Щоб створити файл .apk, натисніть на Файл-> Створити для Android… та заповніть поля. В результаті вийде файл .apk, який ви зможете скопіювати на свій пристрій і потім встановити. Вам потрібно буде переконатися, що ви налаштували свій пристрій, щоб дозволити встановлення програми з невідомих джерел. Amazon має хорошу документацію щодо цього, оскільки вам також потрібно встановити це для встановлення Amazon Appstore. У Corona також є посібник про те, як підписувати, створювати та тестувати додаток на пристроях Android.

Коли гра успішно встановлена ​​на вашому пристрої, слід вдосконалити гру. Наприклад, чому б не спробувати додати звук "попс" або "удар" все, що постукає по повітряній кулі або бомбі. Корона має API для цього:media.playEventSound ().

Або чому б не спробувати додати третій тип об’єкта, скажімо, надбудова, який подвоює поточний бал, або як щодо фонової музики?

Підбивання

Писати ігри з Corona досить прямо, тому що SDK обробляє такі речі, як OpenGL, і він включає вбудований 2D двигун фізики. Крім того, Луа легко навчатися і не повинен бути важким для когось із мінімальним досвідом програмування. На веб-сайті Coronalabs є багато документації, включаючи безліч путівників та навчальних посібників.

Менш ніж у 100 рядках коду у нас працює робоча гра. Гаразд, він не збирається вигравати жодних призів, однак це демонструє силу та гнучкість корона SDK.

Після його оголошення чотири місяці тому на Google I / O 2019, Google Net Hub Max нарешті надійшов у продаж. На сьогоднішній день він доступний у магазині Google та інших роздрібних торговців, таких я...

Після випуску трохи більше тижня тому Google Net Hub Max щойно з’явився у продажу на Rakuten.com. Пристрій зазвичай продається за 229 доларів, але тепер він може отримати 15% знижки приблизно на $ 195...

Ми Радимо Читати