Писање прве Андроид игре помоћу Цорона СДК-а

Аутор: Randy Alexander
Датум Стварања: 1 Април 2021
Ажурирати Датум: 26 Јуни 2024
Anonim
Google Colab + Kaggle - Downloading Datasets & Uploading Submissions from a Notebook
Видео: Google Colab + Kaggle - Downloading Datasets & Uploading Submissions from a Notebook

Садржај


Најпопуларнија категорија у Гоогле Плаи продавници су увек биле Игре. Иако вероватно користимо кључне апликације за продуктивност попут веб прегледача, клијента е-поште и апликације за инстант поруке, играње игара и даље остаје важан део мобилног искуства. Стога не чуди да многи људи који желе да науче да се развијају за Андроид желе да започну правећи игру. Такође, будимо искрени, писање игре је читаво оптерећење забавније од развијања апликације за продуктивност!

Службени језик Андроида је Јава, а службено развојно окружење је Андроид Студио. Ако желите да се позабавите Јава-ом, предлажем вам водич за основе Јава-а, а ако желите научити како да напишете апликацију помоћу Андроид Студио-а, предлажем вам да погледате наш водич о писању своје прве Андроид апликације. Међутим, Јава и Андроид студио нису једини начини развоја за Андроид. Преглед доступних језика и СДК-ова можете пронаћи у нашем водичу: Желим да развијем Андроид Аппс - Које језике треба да научим?


Један од СДК-ова који се спомињу у водичу за програмске језике је Цорона, СДК треће стране дизајниран превасходно за писање игара. Уместо Јава, Цорона користи Луа, брзи скриптни језик који је лако научити, а још моћан. Међутим, Цорона није једини СДК за мобилне игре који користи Луа, остали познати примери укључују Цоцос2д-Кс, Мармеладе и Гидерос.

Преузети и инсталирати

Да бисте започели са употребом Цороне, морате преузети и инсталирати СДК. Идите на веб локацију Цорона и притисните дугме за преузимање. Морате да отворите налог (који је бесплатан) пре него што преузмете комплет. Ако желите да направите стварну .апк датотеку, а не да само покрећете свој програм у емулатору, мораћете да инсталирате Јава 7, али нећете требати да инсталирате Андроид СДК. Да бисте инсталирали Јава 7 Девелопмент Кит, идите на веб локацију Орацле, потражите одељак под називом „Јава СЕ Девелопмент Кит 7у79 ″ и преузмите верзију за свој ПЦ.

Једном када инсталирате Цорону требате је активирати. Ово је једнократни процес, који је бесплатан. Покрените Цорона Симулатор и прихватите лиценцу. Унесите адресу е-поште и лозинку које сте користили за преузимање и кликните на Логин.


Покретање пројекта

Унутар Цорона Симулатора кликните на "Нев Пројецт". Унесите име своје апликације у поље "Наме Наме:" и остатак поставки оставите на њиховим заданим вредностима. Кликните на „ОК“.

Сада ће се појавити три прозора. Прва два су Цорона Симулатор и Цорона Симулаторни излаз. Цорона ће такође отворити прозор програма за преглед фајлова који приказује датотеке за ваш пројекат.

Већина датотека (отприлике 23) у директорију пројекта су за икону апликације! Сада нам је најважнија датотека маин.луа, јер ћемо овде написати код за нашу апликацију.

Увод у Луа

Пре него што кренемо у писање кода, морамо да направимо обилазак Луа којим пиштољем желимо да пишемо. Луа преводилац (имајте на уму да је то скриптни језик, а не компајлирани језик) је доступан за Виндовс, ОС Кс и Линук. Међутим, он је уграђен у Цорону, тако да у овом тренутку није потребно ништа додатно инсталирати. Најлакши начин за игру са Луаом је коришћење онлајн презентације уживо.

На мрежи можете пронаћи пуно добрих водича о Луаи и погледајте Луа референтни приручник, Програмирање у Луау, Тхе.Луа.Туториал и Тхе Туториалс Поинт Луа Туториал.

Ево малог програма Луа који ће вам показати неке од кључних карактеристика Луа:

локална функција доублеИт (к) повратак к * 2 крај за и = 1,10,1 до к = доублеИт (и) ако (к == 10) онда испис („десет“) друго штампање (доублеИт (и)) крај

Горњи код приказује три важне конструкције Луа: функције, петље и изјаве иф. Функција доублеИт () је врло једноставно, само удвостручује прошао у параметру Икс.

Главни код је за петља од 1 до 10. Зове се доублеИт () за сваку итерацију. Ако је повратна вредност 10 (тј. Када ја је 5) онда код исписује „десет“, у супротном само исписује резултат доублеИт ().

Ако имате искуства са кодирањем, онда би пример примера требао бити довољно једноставан да бисте га испратили. Ако желите да научите неко основно програмирање, онда вам предлажем да користите неке од горе наведених ресурса како бисте исценили вештине.

Писање игре

Писање основних програма у Цорони је једноставно. Потребна вам је брига само за једну датотеку, маин.луа, и пусти Цорону да дигне све тешке дизање. Игра о којој ћемо писати је једноставна „тап“ игра. Балон или бомба неће пропасти на екрану. Ако играч дотакне балон, упути бомбу, резултат ће бити подељен са 2, као пенал. Да бисте написали код који требате да измените маин.луа. То можете учинити у било којем уређивачу текста.

Цорона СДК има уграђени 2Д физички мотор, који игара за прављење ствари чини веома једноставним. Први корак у писању игре је иницијализација мотора физике:

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

Код је прилично разумљив. Физика модула је учитана и иницијализирана, додељена је променљивој физика. Да бисте омогућили моторпхисицс.старт () се зове.

Затим стварамо неколико корисних променљивих које ће бити корисне не само за ову једноставну игру, већ и за сложеније игре. половинаВ и половина држите вредности за половину ширине екрана и половину висине екрана:

половина = дисплеј.контрола ширине * 0,5 половина = приказ.цонтент висина * 0,5

Тхе приказ објект је унапред дефинисан објекат који Цорона чини глобално доступним.

Сада долази први корак који заправо чини нешто на екрану:

локални бкг = дисплаи.невИмаге ("нигхт_ски.пнг", пола В, пола Х)

Као и својства попут цонтентХеигхт и цонтентВидтх, тхе приказ Објекат такође има пуно корисних функција. Тхе Нова слика() функција чита датотеку слике (у овом случају .пнг) и приказује је на екрану. Објекти приказа приказани су у слојевима, тако да је ово прва слика коју постављамо на екран, она ће увек бити позадина (осим ако код изричито не учини нешто да то промени). Параметри половинаВ и половина реци Цорони да слику постави у средину.

У овом тренутку можете покренути код на емулатору и видети позадинску слику. Ако датотеку сачувате, емулатор ће приметити да се датотека променила и понудити је да се поново покрене. Ако се то не догоди, користите датотеку-> Поново покрени.

Будући да ће корисник постићи бодове за тапкање на балонима, морамо иницијализирати варијаблу резултата и приказати резултат на екрану:

скор = 0 сцореТект = дисплаи.невТект (скор, половина В, 10)

Резултат ће се задржати у маштовито именованој варијабли скор,и сцореТект је објект који приказује резултат. Као Нова слика(), невТект () Ставите нешто на екран, у овом случају текст. Од сцореТект је глобална променљива, па текст можемо променити у било ком тренутку. Али брзо ћемо доћи до тога.

Можете поново покренути емулатор и видети резултат од 0 на врху екрана.

Лево: Само позадина. Десно: Позадина и резултат.

Сада долази нешто мало сложеније, али не брините, објаснићу то по реду:

локална функција баллоонТоуцхед (догађај) иф (евент.пхасе == "почео") онда Рунтиме: ремовеЕвентЛистенер ("ентерФраме", евент.селф) евент.таргет:ремовеСелф () резултат = резултат + 1 сцореТект.тект = резултат крај

Горњи код дефинира функцију која се зове баллоонТоуцхед () који ће се позивати сваки пут када се балон дотакне. Још нисмо рекли Цорони да зове ову функцију сваки пут када балон притисне, то ће доћи касније, али када то учинимо, функција која се зове.

Дотакните или додирните догађаје имају неколико фаза, од којих многе подржавају превлачење. Корисник ставља прст на предмет, ово је фаза „започела“. Ако клизну прстом у било ком правцу, то је фаза „померања“. Када корисник подигне свој прст са екрана, то је фаза која је завршена.

Прва линија баллоонТоуцхед () провјере да смо у фази „започели“. Желимо да уклонимо балон и повећамо резултат што је пре могуће. Ако се функција поново позива за друге фазе попут „завршио“, онда функција не ради ништа.

Унутарако Изјава су четири линије кода. Хајде да прво размотримо последња два, јер су једноставнија.скор = скор + 1 само повећава резултат за један исцореТект.тект = резултат мења текст резултата на екрану тако да одражава нови резултат. Сетите се како сам то рекаосцореТект је био глобални и њему се може приступити било где, па то радимо овде.

Сада о прва два реда. Након што балон или бомба падну на дно екрана он и даље постоји у меморији апликације, то је само то што га не можете видети. Како игра напредује, број ових екранских објеката стално ће се повећавати. Зато морамо имати механизам који брише предмете кад се не виде. То радимо у функцији која се зовеоффсцреен, о чему још нисмо писали Та ће се функција позивати једном по кадру током игре. Након што је балон прислоњен, морамо га избрисати и уклонити позив који проверава да ли је балон нестао са екрана.

Линијаевент.таргет:ремовеСелф () брише балон. Када се догоди додир, један од параметара функције слушаоца једогађај параметар. Функцији говори о догађају и врсти догађаја, нпр.евент.пхасе. Такође нам говори који је балон дотакнут,евент.таргет. ТхеремовеСелф () функција ради оно што за себе каже да брише објект (у овом случају балон).

Линија прије тога уклања „ентерфраме“ слушатеља, што је функција која се зове сваки кадар да би се видјело је ли балон пао са дна екрана. То ћемо детаљније размотрити када дођемо до писањаоффсцреен функција слушаоца

Дакле, да прекупим.баллоонТоуцхед ()проверава да ли је ово почетак секвенце додира. Затим уклања „ентерфраме“ слушалац, што је функција која се зове сваки кадар да би се видјело је ли балон пао са дна екрана. Затим брише балон, повећава резултат и приказује нови скор.

То је било за балоне, сада нам треба нешто слично за бомбе:

локална функција бомбТоуцхед (догађај) ако (евент.пхасе == "почео"), онда Рунтиме: ремовеЕвентЛистенер ("ентерФраме", евент.селф) евент.таргет:ремовеСелф () резултат = матх.флоор (скор * 0,5) сцореТект.тект = крајњи резултат

Као што видите, код је врло сличан, с изузетком да се резултат, умјесто да повећава резултат, множи са 0,5 (тј. Подељено са 2). Тхе матх.флоор () функција заокружује резултат на најближи цијели број. Дакле, ако је играч имао оцену 3 и убацио бомбу, нови резултат би био 1, а не 1,5.

Споменуо сам то оффсцреен () функционишу раније. Ова функција ће се позвати у сваки кадар да провјери је ли неки објект нестао са екрана. Ево код:

оффсцреен локалне функције (селф, догађај) иф (селф.и == нил) онда се враћа крај иф (селф.и> дисплаи.цонтентХеигхт + 50) онда Рунтиме: ремовеЕвентЛистенер ("ентерФраме", селф) селф: ремовеСелф () енд енд

У рачунању постоји ситуација позната као стање трке. Овде ће се догодити две ствари, али једна се може догодити прва, или се понекад може догодити прва. То је трка. Неки услови за трку су невиђени, јер се чини да се једна ствар деси прва, али они могу изазвати занимљиве грешке у том дану, под правим условима, друга ствар се дешава прво, а затим се систем поквари!

У овој једноставној игри постоји стање трке, јер се две ствари могу догодити врло близу једна другој: балон који се тапка и оффсцреен () позива се функција да се види да ли је балон нестао са екрана. Резултат тога је да се код за брисање балона може позвати, а затим и оффсцреен () позива се функција (што се догађа 30 пута у секунди). Да бисте заобишли овај необичан низ догађаја оффсцреен () функција мора да провери да ли је и вредност објекта је нула (нулл) или не. Ако је нула онда то значи да је објект већ избрисан, па се померите даље, то нису дроиди које тражимо.

Ако је објект још увек у игри, проверите његов положај, ако је нестао 50 пиксела са екрана, затим га избришите и уклоните слушаоца тако да оффсцреен () функција се више неће позивати за овај објект. Код да се то увериоффсцреен () зове се сваки оквир део следећег одељка кода.

Читава премиса ове игре је да нови балони или бомбе и даље падају низ екран. Стога нам је потребна функција која ће створити или нови балон или нову бомбу:

локална функција аддНевБаллоонОрБомб () локални стартКс = матх.рандом (дисплаи.цонтентВидтх * 0,1, дисплаи.цонтентВидтх * 0,9) иф (матх.рандом (1,5) == 1) онда - БОМБ! лоцал бомб = дисплаи.невИмаге ("бомб.пнг", стартКс, -300) пхисицс.аддБоди (бомба) бомб.ентерФраме = оффсцреен Рунтиме: аддЕвентЛистенер ("ентерФраме", бомба) бомба: аддЕвентЛистенер ("додирни", бомба додирива) остало - локални балон балона = дисплаи.невИмаге ("ред_баллоон.пнг", стартКс, -300) пхисицс.аддБоди (балон) баллоон.ентерФраме = оффсцреен Рунтиме: аддЕвентЛистенер ("ентерФраме", балон) балон: аддЕвентЛистенер ("тоуцх", баллоонТоуцхед) крајњи крај

Прва линија функције одлучује одакле ће балон пасти на Икс авион. Ако балон или бомба увек падну у средину, то неће бити превише занимљиво! ТакостартКс је случајни број између 10 процената и 90 процената ширине екрана.

Следећи је насумичан број изабран између 1 и 5.Ако је број 1, бациће се бомба. Ако је 2, 3, 4 или 5, балон ће пасти. То значи да ће бомбе бити бачене око 20 одсто времена.

Шифра бомбе и балона су врло сличне. Прво се приказује слика (било бомба или балон) помоћуНова слика(). Његово Икс позиција је онастартКс док је и положај је постављен на -300, тј. с врха екрана. Разлог за то је тај што желимо да предмет падне изван подручја екрана у видљиво подручје и затим с дна. Пошто користимо 2Д физику мотора добро је дати предмет мало почетне удаљености да падне, тако да може стећи одређену брзину.

Позив напхисицс.аддБоди () узима слику коју учитава Нова слика() и претвара га у предмет у физичком мотору. Ово је веома моћно. Било која датотека се може претворити у тело које на позив гравитације и судара реагује само позивомпхисицс.аддБоди ().

Последња три ретка кода бомбе или балона поставили су слушаоце. ПостављањеентерФраме својство говори Цорони на коју функцију треба позвати сваки кадар и на који позивРунтиме: аддЕвентЛистенер () поставља га. Напокон позив набалон: аддЕвентЛистенер () каже Цорони коју функцију треба позвати ако додирне бомбу или балон.

А сада је игра скоро готова. Само су нам потребне још две линије кода:

аддНевБаллоонОрБомб () тимер.перформВитхДелаи (500, аддНевБаллоонОрБомб, 0)

Прва линија чини да прва бомба или балон падну експлицитним позивомаддНевБаллоонОрБомб (). Друга линија поставља тајмер који ће позватиаддНевБаллоонОрБомб () сваких пола секунде (500 милисекунди). То значи да ће нови балон или бомба пасти сваких пола секунде.

Сада можете да покренете игру на емулатору.

Ево комплетног списка за маин.луа, пуни изворни код пројекта за ову игру можете наћи овде на ГитХуб-у.

-------------------------------------------------- --------------------------------------- - - Падајући балон и бомба игра - Написао Гари Симс за - ------------------------------------------- ---------------------------------------------- - Покрените физички мотор локалне физике = захтевати („физика“) физика.покретање () - израчунати половину ширине екрана и висину половине = дисплеј.цонтент ширина * 0,5 половина Х = приказ.цонтент висина * 0,5 - подесите локални бкг = дисплаи.невИмаге ("нигхт_ски.пнг", половина, половина) - Резултат резултата = 0 сцореТект = дисплаи.невТект (скор, половина В, 10) - Назива се када играч притисне балон - Повећајте резултат за 1 локалну функцију балон Додирнут ( догађај) иф (евент.пхасе == "почео") тада Рунтиме: уклониЕвентЛистенер ("ентерФраме", евент.селф) евент.таргет:ремовеСелф () резултат = резултат + 1 сцореТект.тект = крај завршетка - позива се играч убацује бомбу - половина резултата као локална функција казненог ударца бомба Додирнута (догађај) ако (догађај.фаза == "почео"), а затим Рунтиме: ремовеЕвентЛистенер ("ентерФраме", евент.селф) евент.таргет:ремовеСелф () резултат = матх.флоор (скор * 0,5) сцореТект.тект = крајњи крај резултата - Обришите објекте који су отпали са дно екрана локална функција на екрану (селф, догађај) иф (селф.и == нил) онда се враћа крај иф (селф.и> дисплаи.цонтентХеигхт + 50), а затим Рунтиме: ремовеЕвентЛистенер ("ентерФраме", селф) селф: ремовеСелф () крајњи крај - Додајте нову локалну функцију балона или бомбе аддНевБаллоонОрБомб () - Ред_баллон.пнг и бомб.пнг можете пронаћи у ГитХуб репо лоцал стартКс = матх.рандом (дисплаи.цонтентВидтх * 0.1, дисплаи.цонтентВидтх * 0.9) ако је (математички случајни (1,5) == 1) онда - БОМБ! лоцал бомб = дисплаи.невИмаге ("бомб.пнг", стартКс, -300) пхисицс.аддБоди (бомба) бомб.ентерФраме = оффсцреен Рунтиме: аддЕвентЛистенер ("ентерФраме", бомба) бомба: аддЕвентЛистенер ("додирни", бомба додирива) остало - локални балон балона = дисплаи.невИмаге ("ред_баллоон.пнг", стартКс, -300) пхисицс.аддБоди (балон) баллоон.ентерФраме = оффсцреен Рунтиме: аддЕвентЛистенер ("ентерФраме", балон) балон: аддЕвентЛистенер ("тоуцх", балонТоуцхед) крај крај - Додајте нови балон или бомбу сада аддНевБаллоонОрБомб () - Наставите додавати нови балон или бомбу сваких 0,5 секунди тимер.перформВитхДелаи (500, аддНевБаллоонОрБомб, 0)

Следећи кораци

Следећи корак је играње игре на правом Андроид уређају. Да бисте направили .апк датотеку, кликните на Филе-> Буилд фор Андроид… и попуните поља. Резултат ће бити .апк датотека коју можете копирати на уређај и инсталирати. Морат ћете осигурати да сте конфигурирали свој уређај тако да допушта инсталацију апликације из непознатих извора. Амазон има добру документацију о овоме, јер ово такође требате подесити да бисте инсталирали Амазон Аппсторе. Цорона такође има водич о томе како да пријавите, направите и тестирате своју апликацију на Андроид уређајима.

Са успешно инсталираном игром на вашем уређају, следећа ствар коју треба да урадите је побољшање игре. На пример, зашто не покушате да додате звук „поп“ или „прасак“ све што куцне балон или бомба. Цорона има АПИ за то:медиа.плаиЕвентСоунд ().

Или зашто не покушавате додати трећу врсту објекта, рецимо супер појачање које удвостручује тренутни резултат, или како је са неком позадинском музиком?

Упаковати

Писање игара с Цороном је сасвим јасно јер СДК рукује са стварима попут ОпенГЛ-а и укључује уграђени 2Д физички мотор. Такође, Луа је лако учити и не би требало да буде тешко никоме чак и са минималним искуством у програмирању. Веб страница Цороналабс има пуно документације, укључујући пуно водича и туторијала.

У мање од 100 линија кода имамо радну игру. У реду, неће наградити наградама, али показује снагу и флексибилност Цорона СДК-а.

Један од главних диференцијатора ОнеПлус 6Т МцЛарен Едитион од његовог редовног рођака, осим разлике у цени од 70 УСД, је увођење 30В "Варп Цхарге 30" технологије. Овај брзи технолошки строј...

Куповина половних паметних телефона може бити помало минско поље, али постоје одлични повољни договори ако знате шта да тражите. Често ћете можда морати одустати од оригиналне кутије или можда недоста...

Обавезно Прочитајте