Писане на първата ви игра с Android, като използвате SDK Corona

Автор: Randy Alexander
Дата На Създаване: 1 Април 2021
Дата На Актуализиране: 26 Юни 2024
Anonim
IT-шоу Чоле Пудес - это наше поле чудес. Последний ивент 2021 на MJC
Видео: IT-шоу Чоле Пудес - это наше поле чудес. Последний ивент 2021 на MJC

Съдържание


Най-популярната категория в 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. Отидете на уебсайта на Корона и натиснете бутона за изтегляне. Ще трябва да създадете акаунт (който е безплатен), преди да можете да изтеглите комплекта. Ако искате да създадете действителен .apk файл, а не само да стартирате програмата си в емулатора, ще трябва да инсталирате Java 7, но няма да е необходимо да инсталирате Android SDK. За да инсталирате Java 7 Development Kit, отидете на уебсайта на Oracle, потърсете раздела, наречен „Java SE Development Kit 7u79“ и изтеглете версията за вашия компютър.


След като инсталирате Corona, трябва да го активирате. Това е еднократен процес, който е безплатен. Стартирайте Corona Simulator и се съгласете с лиценза. Въведете имейл адреса и паролата, които сте използвали за изтеглянето, и щракнете върху Вход.

Стартиране на проекта

Отвътре в Corona Simulator кликнете върху „New Project.“ Въведете име на приложението си в полето „Име на приложението:“ и оставете останалите настройки по подразбиране. Щракнете върху „OK“.

Сега ще се появят три прозореца. Първите два са симулатора Corona и Corona Simulator. Corona също ще отвори прозорец на програма за преглед на файлове, показващ файловете за вашия проект.

По-голямата част от файловете (около 23 от тях) в директорията на проекта са за иконата на приложението! Най-важният файл за нас в момента е main.lua, тъй като тук ще напишем кода за нашето приложение.

Въведение в Луа

Преди да започнем да пишем кода, трябва да направим обиколка със свирка на Луа. Интерпретаторът на Lua (не забравяйте, че това е скриптов език, а не компилиран език) е наличен за Windows, OS X и Linux. Въпреки това той е вграден в Corona, така че понастоящем няма нужда да инсталирате нищо допълнително. Най-лесният начин да играете с Lua е да използвате онлайн демонстрацията на живо.

Можете да намерите много добри уроци за Lua онлайн и трябва да разгледате Справочното ръководство за Lua, Програмирането в Lua, The.Lua.Tutorial и The Tutorials Point Lua Tutorial.

Ето една малка програма на Lua, която ще ви покаже някои от основните характеристики на Lua:

локална функция doubleIt (x) връщане x * 2 край за i = 1,10,1 do x = doubleIt (i), ако (x == 10), тогава печата („десет“), друго печата (doubleIt (i)) край

Кодът по-горе показва три важни конструкции на Lua: функции, цикли и оператори if. Функцията doubleIt () е много проста, просто удвоява преминалия параметър х.

Основният код е a за цикъл от 1 до 10. Обажда се doubleIt () за всяка итерация. Ако връщащата стойност е 10 (т.е. когато аз е 5) тогава кодът отпечатва "десет", в противен случай просто отпечатва резултата от doubleIt ().

Ако имате опит с кодирането, примерен код трябва да бъде достатъчно лесен за следване. Ако искате да научите някои основни програми, тогава ви предлагам да използвате някои от свързаните по-горе ресурси, за да усъвършенствате вашите умения.

Писане на играта

Писането на основни програми в Corona е просто. Необходимо е да се грижите само за един файл, main.lua, и нека Корона да направи цялото повдигане. Играта, която ще напишем, е проста игра „докосване“. Балон или бомба ще се провали по екрана. Ако играчът почука на балона, той вкара точка, натисне бомба, тогава резултатът ще бъде разделен на 2, като дузпа. За да напишете кода, който трябва да редактирате main.lua, Можете да направите това във всеки текстов редактор.

Corona SDK има вграден 2D двигател по физика, което прави изграждането на игри много лесно. Първата стъпка при писането на играта е да се инициализира двигателят на физиката:

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

Кодът е доста обяснителен. Физиката на модула е заредена и инициализирана, тя се присвоява на променливата физика, За да активирате двигателяphysics.start () е наречен.

След това създаваме няколко полезни променливи, които ще бъдат полезни не само за тази проста игра, но и за по-сложни игри. halfW и halfH задръжте стойностите за половината от ширината на екрана и половината от височината на екрана:

halfW = display.contentWidth * 0.5 половинаH = display.contentHeight * 0.5

Най- показ object е предварително дефиниран обект, който Corona прави глобално достъпен.

Сега идва първата стъпка, която всъщност прави нещо на екрана:

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

Както и свойства като contentHeight и contentWidth, the показ обектът също има много полезни функции. Най- нова картинка() функция чете файл с изображения (в този случай a .png) и го показва на екрана. Показваните обекти се изобразяват на слоеве, така че тъй като това е първото изображение, което поставяме на екрана, то винаги ще бъде фона (освен ако кодът изрично не направи нещо, което да промени това). Параметрите halfW и halfH кажи на Корона да постави изображението в средата.

В този момент можете да стартирате кода в емулатора и да видите фоновото изображение. Ако запазите файла, емулаторът ще забележи, че файлът се е променил и предлага да се рестартира. Ако това не се случи, използвайте File-> Reunch.

Тъй като потребителят ще отбележи точки за потупване на балони, трябва да инициализираме променлива за оценка и да покажем резултата на екрана:

score = 0 scoreText = display.newText (резултат, половина W, 10)

Резултатът ще се запази в образно променливата отбележи,и scoreText е обектът, който показва резултата. като нова картинка(), newText () поставете нещо на екрана, в случая текст. От scoreText е глобална променлива, тогава можем да променим текста във всяка точка. Но ще стигнем до това скоро.

Можете да рестартирате емулатора и да видите резултата от 0 на дисплея в горната част на екрана.

Отляво: Само фонът. Вдясно: Обща информация и резултат.

Сега идва нещо малко по-сложно, но не се притеснявайте, ще го обясня по ред:

локална функция balloonTouched (събитие), ако (event.phase == "започна"), тогава Времетраене: премахнетеEventListener ("enterFrame", event.self) event.target:removeSelf () резултат = резултат + 1 scoreText.text = резултат край

Кодът по-горе определя функция, наречена balloonTouched () който ще се извиква всеки път, когато се чука балон. Все още не сме казали на Корона да извиква тази функция всеки път, когато балонът бъде натиснат, това ще дойде по-късно, но когато го направим, това е функцията, която се извиква.

Събитията за докосване или докосване имат няколко етапа, много от които поддържат влаченето. Потребителят поставя пръста си върху обект, това е фазата „започна“. Ако плъзгнат пръста си в която и да е посока, това е фазата на „преместване“. Когато потребителят повдигне пръста си от екрана, това е фазата на „приключване“.

Първият ред на balloonTouched () проверяваме, че сме във фаза „започна“. Искаме да премахнем балона и да увеличим резултата възможно най-скоро. Ако функцията се извика отново за други фази като „приключил“, функцията не прави нищо.

Вътре вако изявление са четири реда код. Нека първо да разгледаме последните две, тъй като те са по-прости.резултат = резултат + 1 просто увеличава резултата с едно иscoreText.text = резултат променя текста на резултата на екрана, за да отразява новата оценка. Спомнете си как казах товаscoreText беше глобален и можеше да се получи достъп навсякъде. Добре, това правим тук.

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

Линиятаevent.target:removeSelf () изтрива балона. Когато се случи докосване, един от параметрите на функцията на слушателя есъбитие параметър. Той казва функцията за събитието и какъв тип събитие е, напр.event.phase. Също така ни казва кой балон е бил подслушван,event.target. Най-removeSelf () функция прави това, което казва, че прави, изтрива обекта (в случая балон).

Редът преди това премахва слушалката на „enterframe“, която е функцията, която се нарича всеки кадър, за да се види дали балонът е паднал от долната част на екрана. Ще разгледаме това по-подробно, когато дойдем да пишемизвън екрана функция на слушателя.

И така, за да обобщим.balloonTouched ()проверява дали това е началото на сензорната последователност. След това премахва слушалката на „енфрафрема“, която е функцията, която се нарича всеки кадър, за да се види дали балонът е паднал от долната част на екрана. След това изтрива балона, увеличава резултата и показва новата оценка.

Това беше за балони, сега имаме нужда от нещо подобно за бомби:

локална функция bombTouched (събитие), ако (event.phase == "започна"), тогава Времетраене: премахнетеEventListener ("enterFrame", event.self) event.target:removeSelf () score = math.floor (score * 0.5) scoreText.text = резултат край

Както можете да видите, кодът е много подобен с изключението, че вместо да увеличите резултата, резултатът се умножава по 0,5 (т.е. разделен на 2). Най- math.floor () функция закръгля резултата до най-близкото цяло число. Така че, ако играчът има резултат 3 и натисне бомба, то новият резултат ще бъде 1, а не 1,5.

Споменах за извън екрана () функционират по-рано. Тази функция ще бъде извикана всеки кадър, за да провери дали даден обект е излязъл от екрана. Ето кода:

локална функция offscreen (самостоятелно, събитие), ако (self.y == нула), тогава върнете края, ако (self.y> display.contentHeight + 50), тогава Времетраене: removeEventListener ("enterFrame", self) self: removeSelf () end end

При изчисляването има ситуация, известна като условие за състезание. Тук ще се случат две неща, но едното може да се случи първо, или понякога другото може да се случи първо. Това е състезание. Някои състезателни условия са невиждани, защото едно нещо винаги изглежда се случва първо, но те могат да причинят интересни грешки в този един ден, при правилните условия, другото се случва първо и след това системата се счупва!

В тази проста игра има условие за състезание, защото две неща могат да се случат много близо един до друг: балон, който се подслушва и извън екрана () извиква се функция, за да се види дали балонът е излязъл от екрана. Резултатът е, че кодът за изтриване на балона може да бъде извикан и след това извън екрана () извиква се функция (което се случва като 30 пъти в секунда). За да заобиколите тази странна последователност от събития извън екрана () функцията трябва да провери дали ш стойност на обекта е нула (нула) или не. Ако е нула тогава това означава, че обектът вече е изтрит, така че се придвижвайте, това не са дроидите, които търсим.

Ако обектът все още се възпроизвежда, проверете позицията му, ако е излязъл 50 пиксела от екрана, след това го изтрийте и премахнете слушателя, така че извън екрана () функция няма да бъде извикана отново за този обект. Кодът, за да се уверите в товаизвън екрана () се нарича всеки кадър е част от следващия раздел на кода.

Цялата предпоставка на тази игра е, че новите балони или бомби ще продължат да падат по екрана. Следователно се нуждаем от функция, която ще създаде или нов балон, или нова бомба:

локална функция addNewBalloonOrBomb () локален стартX = 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 = offscreen Времетраене: addEventListener ("enterFrame", бомба) бомба: addEventListener ("докосване", bomTouched) друго - Местен балон на балон = display.newImage ("red_balloon.png", startX, -300) physics.addBody (балон) балон.enterFrame = offscreen Времетраене: addEventListener ("enterFrame", балон) балон: addEventListener ("touch", балон Докоснат) краен край

Първият ред на функцията решава от къде ще падне балонът на х самолет. Ако балонът или бомбата винаги паднат в средата, това няма да е много интересно! ТакаStartX е произволно число между 10 процента и 90 процента от ширината на екрана.

След това се избира случайно число между 1 и 5.Ако числото е 1, тогава ще падне бомба. Ако е 2, 3, 4 или 5, тогава балонът ще отпадне. Това означава, че бомбите ще бъдат свалени около 20 процента от времето.

Кодът на бомбата и балона са доста сходни. Първо изображението (или бомба, или балон) се показва с помощтанова картинка(). негов х позиция е тази наStartX докато си ш положението е зададено на -300, т.е. в горната част на екрана. Причината за това е, че искаме обектът да падне извън зоната на екрана във видимата област и след това да се откачи от дъното. Тъй като използваме 2D двигателя на физиката, е добре да дадем на обекта малко първоначално разстояние, за да падне, така че той може да спечели известна скорост.

Призивът къмphysics.addBody () приема изображението, заредено от нова картинка() и го превръща в обект във физическия двигател. Това е много мощно. Всеки файл с изображения може да бъде направен в тяло, което реагира на гравитацията и сблъсъците само с повикванеphysics.addBody ().

Последните три реда от кода на бомбата или балона настроиха слушателите. Настройка наenterFrame свойството казва на Corona към коя функция да извика всеки кадър и обаждането доВреметраене: addEventListener () настройва го. И накрая, обаждането добалон: addEventListener () казва на Корона коя функция да се обади, ако бомбата или балонът се докоснат.

И сега играта е почти завършена. Просто ни трябват още два реда код:

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

Първият ред прави първата бомба или балон да падне чрез изрично повикванеaddNewBalloonOrBomb (), Вторият ред задава таймер, който ще извикаaddNewBalloonOrBomb () на всеки половин секунда (500 милисекунди). Това означава, че нов балон или бомба ще падне на всеки половин секунда.

Вече можете да стартирате играта в емулатора.

Ето пълния списък за main.lua, пълният изходен код на проекта за тази игра може да се намери тук на GitHub.

-------------------------------------------------- --------------------------------------- - - Падаща игра с балон и бомба - Написано от Гари Симс за - ------------------------------------------- ---------------------------------------------- - Започнете физика на двигателя местна физика = изисквам ("физика") физика.старт () - Изчислява се половината ширина на екрана и височина половина W = дисплей.контент ширина * 0,5 половинаH = дисплей.съдържаниеВисочина * 0,5 - Задайте фона на локалния bkg = display.newImage ("night_sky.png", halfW, halfH) - Резултат на резултата = 0 scoreText = display.newText (резултат, половина W, 10) - Обажда се при натискане на балона от играча - Увеличете резултата с 1 локална функция балон Докоснат ( събитие) ако (event.phase == "започна"), тогава Runtime: RemoveEventListener ("enterFrame", event.self) event.target:removeSelf () резултат = резултат + 1 scoreText.text = краен резултат - извиква се, когато бомбата се подслушва от играча - Половината резултат като локална функция на наказание bomTouched (събитие), ако (event.phase == "започна"), а след това по време на изпълнение: премахнетеEventListener ("enterFrame", event.self) event.target:removeSelf () резултат = math.floor (оценка * 0,5) scoreText.text = краен резултат - Изтрийте обекти, които са паднали от дъното на локалната функция на екрана извън екрана (самостоятелно, събитие), ако (self.y == нула), тогава върнете края, ако (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 = offscreen Времетраене: addEventListener ("enterFrame", бомба) бомба: addEventListener ("докосване", bomTouched) друго - Местен балон на балон = display.newImage ("red_balloon.png", startX, -300) physics.addBody (балон) балон.enterFrame = offscreen Времетраене: addEventListener ("enterFrame", балон) балон: addEventListener ("touch", balonTouched) краен край - Добавете нов балон или бомба сега addNewBalloonOrBomb () - Продължавайте да добавяте нов балон или бомба на всеки 0,5 секунди timer.performWithDelay (500, addNewBalloonOrBomb, 0)

Следващи стъпки

Следващата стъпка е да играете играта на истинско устройство с Android. За да създадете .apk файл, щракнете върху File-> Build for Android… и попълнете полетата. Резултатът ще бъде .apk файл, който можете да копирате на устройството си и след това да инсталирате. Ще трябва да се уверите, че сте конфигурирали устройството си, за да разрешите инсталирането на приложение от неизвестни източници. Amazon има добра документация за това, тъй като вие също трябва да зададете това, за да инсталирате Amazon Appstore. Corona също има ръководство за това как да подписвате, изграждате и тествате приложението си на устройства с Android.

След като играта е успешно инсталирана на вашето устройство, следващото нещо е да подобрите играта. Например, защо не опитате да добавите звук „поп“ или „взрив“ всичко, което е подслушвано с балон или бомба. Corona има API за това:media.playEventSound ().

Или защо да не опитате да добавите трети тип обект, да кажем супер усилване, което удвоява текущия резултат, или какво ще кажете за някаква фонова музика?

Wrap-нагоре

Писането на игри с Corona е направо напред, тъй като SDK се справя с неща като OpenGL и включва вграден 2D двигател на физиката. Също така Lua е лесен за научаване и не трябва да е трудно за всеки, който има дори минимум опит в програмирането. Уебсайтът на Coronalabs има много документация, включително много ръководства и ръководства.

В по-малко от 100 реда код имаме работеща игра. Добре, няма да печелите никакви награди, но това показва силата и гъвкавостта на SDK Corona.

Nintendo D е сред най-популярните ръчни конзоли за всички времена. Неговата емблематична стойност е точно там с тази на Game Boy и PP. За системата имаше някои невероятни игри и понякога е по-лесно д...

Независимо дали правите полет зад граница или прекарвате деня си в кабина, това, че можете да блокирате нежелания шум, има огромна полза от това как звучи музиката ви. Наушниците, които добре пасват н...

Ние Ви Препоръчваме