Jūsu pirmās Android spēles rakstīšana, izmantojot Corona SDK

Autors: Randy Alexander
Radīšanas Datums: 1 Aprīlis 2021
Atjaunināšanas Datums: 26 Jūnijs 2024
Anonim
Newspaper junk journal and ephemera - Starving Emma
Video: Newspaper junk journal and ephemera - Starving Emma

Saturs


Vispopulārākā kategorija Google Play veikalā vienmēr ir bijusi Spēles. Lai gan mēs visi, iespējams, izmantojam tādas galvenās produktivitātes lietotnes kā tīmekļa pārlūks, e-pasta klients un tūlītējās ziņojumapmaiņas lietotne, spēles joprojām ir svarīga mobilās pieredzes sastāvdaļa. Tāpēc nav pārsteigums, ka daudzi cilvēki, kuri vēlas iemācīties attīstīties Android, vēlas sākt ar spēles izveidi. Būsim arī godīgi - spēles rakstīšana ir daudz vairāk prieka nekā produktivitātes lietotnes izstrāde!

Oficiālā Android valoda ir Java, bet oficiālā izstrādes vide ir Android Studio. Ja vēlaties izpētīt Java, tad es iesaku mūsu Java pamatprogrammu un, ja vēlaties uzzināt, kā rakstīt lietotni, izmantojot Android Studio, es iesaku jums izpētīt mūsu apmācību par pirmās Android lietotnes rakstīšanu. Tomēr Java un Android studio nav vienīgie Android izstrādāšanas veidi. Pieejamo valodu un SDK pārskatu varat atrast mūsu ceļvedī: Es vēlos attīstīt Android lietotnes - kādas valodas vajadzētu iemācīties?


Viens no programmēšanas valodu ceļvedī minētajiem SDK ir Corona, trešās puses SDK, kas paredzēts galvenokārt spēļu rakstīšanai. Java vietā Corona izmanto Lua - ātru skriptu valodu, kuru ir viegli iemācīties, taču tā ir spēcīga. Tomēr Corona nav vienīgais mobilo spēļu SDK, kas izmanto Lua, citi labi zināmi piemēri ir Cocos2d-X, Marmalade un Gideros.

Lejupielādējiet un instalējiet

Lai sāktu darbu ar Corona, jums būs jālejupielādē un jāinstalē SDK. Dodieties uz Corona vietni un noklikšķiniet uz lejupielādes pogas. Lai varētu lejupielādēt komplektu, jums būs jāizveido konts (tas ir bezmaksas). Ja vēlaties izveidot faktisku .apk failu, nevis tikai palaist savu programmu emulatorā, jums būs jāinstalē Java 7, tomēr jums nevajadzēs instalēt Android SDK. Lai instalētu Java 7 attīstības komplektu, dodieties uz Oracle vietni, meklējiet sadaļu “Java SE attīstības komplekts 7u79” un lejupielādējiet sava datora versiju.


Kad esat instalējis Corona, jums tas jāaktivizē. Tas ir vienreizējs process, kas ir bezmaksas. Startējiet Corona Simulator un piekrītiet licencei. Ievadiet e-pasta adresi un paroli, kuru izmantojāt lejupielādei, un noklikšķiniet uz Pieteikties.

Projekta uzsākšana

No Corona Simulator noklikšķiniet uz “New Project”. Laukā “Application Name:” ievadiet savas lietotnes nosaukumu un atstājiet pārējos iestatījumus pēc noklusējuma. Noklikšķiniet uz “Labi”.

Tagad parādīsies trīs logi. Pirmie divi ir Corona Simulator un Corona Simular Output. Corona atvērs arī failu pārlūkprogrammas logu, kurā parādīti jūsu projekta faili.

Lielākā daļa projektu direktorijā esošo failu (apmēram 23 no tiem) ir paredzēti lietojumprogrammas ikonai. Mums šobrīd vissvarīgākais fails ir galvenā.lua, jo šeit mēs uzrakstīsim savas lietotnes kodu.

Ievads Lua

Pirms mēs sākam rakstīt kodu, mums ir jāveic pārskats par Lua. Lua tulks (atcerieties, ka šī ir skriptu valoda, nevis apkopota valoda) ir pieejams operētājsistēmām Windows, OS X un Linux. Tomēr tas ir iebūvēts Koronā, tāpēc šajā laikā jums nav jāinstalē nekas cits. Vienkāršākais veids, kā spēlēties ar Lua, ir izmantot tiešsaistes tiešraides demonstrāciju.

Tiešsaistē var atrast daudz labu mācību materiālu par Lua, un jums vajadzētu apskatīt Lua rokasgrāmatu, Programmēšanu Lua, The.Lua.Tutorial un Tutorials Point Lua Tutorial.

Šeit ir maza Lua programma, kas parādīs dažas galvenās Lua funkcijas:

vietējā funkcija doubleIt (x) return x * 2 beigas i = 1,10,1 do x = doubleIt (i), ja (x == 10), tad drukāt ("desmit") citur drukāt (doubleIt (i)) beigas

Iepriekš minētais kods parāda trīs svarīgas Lua konstrukcijas: funkcijas, cilpas un if paziņojumus. Funkcija doubleIt () ir ļoti vienkāršs, tas vienkārši divkāršo nodoto parametru x.

Galvenais kods ir a par cilpa no 1 līdz 10. Tas zvana doubleIt () par katru atkārtojumu. Ja atgriešanās vērtība ir 10 (t.i., kad i ir 5), tad kods izdrukā “desmit”, pretējā gadījumā tas vienkārši izdrukā rezultātu doubleIt ().

Ja jums ir kāda kodēšanas pieredze, parauga kodam vajadzētu būt pietiekami vienkāršam. Ja jūs vēlaties iemācīties pamata programmēšanu, es iesaku izmantot dažus no iepriekšminētajiem resursiem, lai pilnveidotu savas prasmes.

Spēles rakstīšana

Pamatprogrammu rakstīšana Koronā ir vienkārša. Jums jāraizējas tikai par vienu failu, main.lua, un ļaujiet Koronai veikt visu smago celšanu. Spēle, kuru mēs rakstīsim, ir vienkārša “pieskāriena” spēle. Ekrānā neizdosies sabojāt balonu vai bumbu. Ja spēlētājs piesit pie balona, ​​kuram viņi gūst punktu, piesit bumbu, tad rezultāts tiks sadalīts ar 2 kā sods. Lai uzrakstītu rediģējamo kodu galvenā.lua. To var izdarīt jebkurā teksta redaktorā.

Corona SDK ir iebūvēts 2D fizikas motors, kas spēles veidošanu padara ļoti vieglu. Pirmais spēles rakstīšanas solis ir fizikas dzinēja inicializēšana:

vietējā fizika = nepieciešama ("fizika") füüsika.starts ()

Kods ir diezgan pašsaprotams. Moduļa fizika tiek ielādēta un inicializēta, tā tiek piešķirta mainīgajam fizika. Lai ieslēgtu motorufizika.starts () tiek saukts.

Tālāk mēs izveidosim dažus noderīgus mainīgos, kas būs noderīgi ne tikai šai vienkāršajai spēlei, bet arī sarežģītākām spēlēm. puseW un puseH turiet vērtības pusei no ekrāna platuma un pusei no ekrāna augstuma:

halfW = display.contentWidth * 0.5 halfH = display.contentHeight * 0.5

displejs objekts ir iepriekš definēts objekts, kuru Corona padara globāli pieejamu.

Tagad ir pirmais solis, kas faktiski kaut ko liek notikt ekrānā:

vietējais bkg = display.newImage ("night_sky.png", puseW, puseH)

Kā arī tādas īpašības kā satursAugstums un satursWidth, displejs objektam ir arī daudz noderīgu funkciju. newImage () funkcija nolasa attēla failu (šajā gadījumā .png) un parāda to uz ekrāna. Displeja objekti tiek atveidoti slāņos, tā kā tas ir pirmais attēls, ko mēs uzliekam uz ekrāna, tad tas vienmēr būs fons (ja vien kods tieši neko nedarīs, lai to mainītu). Parametri puseW un puseH pasaki Koronai, lai attēls novietots vidū.

Šajā brīdī jūs varat palaist kodu emulatorā un redzēt fona attēlu. Ja saglabājat failu, emulators pamanīs, ka fails ir mainījies, un piedāvās to atsākt. Ja tas nenotiek, izmantojiet File-> Restart.

Tā kā lietotājs iegūs punktus par gaisa balonu pieskārienu, mums jāinicializē rezultāta mainīgais un jāparāda rezultāts uz ekrāna:

rezultāts = 0 scoreText = display.newText (rezultāts, puseW, 10)

Rezultāts tiks saglabāts tēlaini nosauktajā mainīgajā punktu skaits,un scoreText ir objekts, kas parāda punktu skaitu. Patīk newImage (), newText () ielieciet kaut ko ekrānā, šajā gadījumā tekstu. Kopš scoreText ir globāls mainīgais, tad tekstu varam mainīt jebkurā brīdī. Bet mēs to drīz sasniegsim.

Jūs varat atsākt emulatoru un redzēt 0 rādījumu ekrāna augšdaļā.

Pa kreisi: tikai fons. Pa labi: fons un rezultāts.

Tagad nāk kaut kas mazliet grūtāks, bet neuztraucieties, es to izskaidrošu pa rindām:

vietējā funkcija balloonTouched (notikums), ja (event.phase == "sākās"), tad Runtime: removeEventListener ("enterFrame", event.self) event.target:removeSelf () score = score + 1 scoreText.text = score end end

Iepriekš minētais kods nosaka funkciju, ko sauc balloonTouched () kas tiks izsaukts katru reizi, kad tiks piespiests balons. Mēs vēl neesam teikuši Koronai, lai izsauktu šo funkciju katru reizi, kad tiek piespiests balons. Tas notiks vēlāk, bet, kad mēs to darīsim, funkcija tiks izsaukta.

Pieskaršanās vai pieskāriena notikumiem ir vairāki posmi, daudzi no tiem, lai atbalstītu vilkšanu. Lietotājs pieliek pirkstu objektam, šī ir “sākšanas” fāze. Ja viņi slīd ar pirkstu jebkurā virzienā, tā ir “pārvietotā” fāze. Kad lietotājs paceļ pirkstu no ekrāna, tā ir “beigu” fāze.

Pirmā rinda balloonTouched () pārbaudes, kas mēs esam “sākās” fāzē. Mēs vēlamies noņemt balonu un palielināt rezultātu, cik drīz vien iespējams. Ja funkcija tiek izsaukta vēlreiz uz citām fāzēm, piemēram, “beidzās”, tad funkcija neko nedara.

Iekšpusēja paziņojums ir četras koda rindiņas. Darīsimies ar pēdējiem diviem, jo ​​tie ir vienkāršāki.rezultāts = rezultāts + 1 tikai palieliniet punktu skaitu par vienu unscoreText.text = rezultāts maina punktu tekstu uz ekrāna, lai atspoguļotu jauno rezultātu. Atcerieties, kā es to teicuscoreText bija globāls un tam varēja piekļūt jebkur, labi, ko mēs šeit darām.

Tagad par pirmajām divām rindām. Kad balons vai bumba nokrīt ekrāna apakšā, tas joprojām pastāv lietotnes atmiņā, jūs vienkārši to nevarat redzēt. Spēlei progresējot, šo ārpus ekrāna redzamo objektu skaits vienmērīgi palielināsies. Tāpēc mums ir nepieciešams mehānisms, kas izdzēš objektus, kad tie ir neredzami. Mēs to darām funkcijā ar nosaukumuārpus ekrāna, ko mēs vēl neesam uzrakstījuši. Spēles laikā šī funkcija tiks izsaukta vienreiz kadrā. Kad balons ir pieskāries, mums tas ir jāizdzēš un jānoņem zvans, kas pārbauda, ​​vai balons ir izgājis ārpus ekrāna.

Līnijaevent.target:removeSelf () izdzēš balonu. Kad notiek pieskāriena notikums, viens no klausītāja funkcijas parametriem irnotikums parametrs. Tas norāda funkciju par notikumu un kāda veida notikumu tas ir, piem.notikums.fāze. Tas arī mums saka, kurš balons tika iespiests,notikums.mērķis. noņemt sevi () funkcija dara to, ko saka, to dara, tā izdzēš objektu (šajā gadījumā balonu).

Rinda pirms tās noņem “enterframe” klausītāju, kas ir funkcija, kuru sauc par katru kadru, lai redzētu, vai balons ir nokritis ekrāna apakšā. Mēs to apskatīsim sīkāk, kad nāksim rakstītārpus ekrāna klausītāja funkcija.

Tātad, lai atgādinātu.balloonTouched ()pārbauda, ​​vai tas ir pieskārienu secības sākums. Pēc tam tas noņem “enterframe” klausītāju, kas ir funkcija, ko sauc par katru kadru, lai redzētu, vai balons ir nokritis ekrāna apakšā. Pēc tam tas izdzēš balonu, palielina punktu skaitu un parāda jauno rezultātu.

Tas attiecās uz gaisa baloniem, tagad mums vajag kaut ko līdzīgu bumbām:

vietējā funkcija bombTouched (notikums), ja (event.phase == "sākās"), tad Runtime: removeEventListener ("enterFrame", event.self) event.target:removeSelf () score = math.floor (score * 0.5) scoreText.text = rezultāts beigu galā

Kā redzat, kods ir ļoti līdzīgs ar izņēmumu, ka tā vietā, lai palielinātu rezultātu, rezultāts tiek reizināts ar 0,5 (t.i., dalīts ar 2). math.floor () funkcija noapaļo rezultātu līdz tuvākajam veselajam skaitlim. Tātad, ja spēlētājam bija 3 punkti un viņš uzsita bumbu, jaunais rezultāts būs 1, nevis 1,5.

Es minēju ārpus ekrāna () funkcija agrāk. Šī funkcija tiks izsaukta katrā kadrā, lai pārbaudītu, vai objekts ir aizgājis no ekrāna. Šis ir kods:

vietējās funkcijas ārējais ekrāns (pats, notikums), ja (self.y == nulle), pēc tam atgriešanās beigas, ja (self.y> display.contentHeight + 50), tad Runtime: removeEventListener ("enterFrame", self) self: removeSelf () end end

Datorā pastāv situācija, kas pazīstama kā sacensību apstākļi. Šeit notiks divas lietas, bet viena varētu notikt pirmā, vai dažreiz otra varētu notikt pirmā. Tā ir sacensība. Daži sacensību apstākļi nav redzami, jo šķiet, ka viena lieta notiek vispirms, bet tie vienā dienā var radīt interesantas kļūdas, ja pareizajos apstākļos vispirms notiek otra lieta, un tad sistēma sabojājas!

Šajā vienkāršajā spēlē pastāv sacīkstes nosacījums, jo divas lietas var notikt ļoti tuvu viena otrai: tiek piespiests balons un ārpus ekrāna () tiek izsaukta funkcija, lai redzētu, vai balons nav izgājis no ekrāna. Rezultātā balss dzēšanas kodu var izsaukt un pēc tam ārpus ekrāna () tiek izsaukta funkcija (kas notiek tāpat kā 30 reizes sekundē). Lai apietu šo nepāra notikumu secību, ārpus ekrāna () funkcijai jāpārbauda, ​​vai y objekta vērtība ir nulle (nulle) vai nē. Ja tas ir nulle tad tas nozīmē, ka objekts jau ir izdzēsts, tāpēc pārvietojieties, tie nav mūsu meklētie droidi.

Ja objekts joprojām tiek atskaņots, pārbaudiet tā atrašanās vietu, ja tas ir noņēmis 50 pikseļus no ekrāna, pēc tam izdzēsiet to un noņemiet klausītāju, lai ārpus ekrāna () šī objekta funkcija vairs netiks izsaukta. Kods, lai par to pārliecinātosārpus ekrāna () tiek saukts katrs rāmis ir daļa no nākamās koda sadaļas.

Šīs spēles galvenais priekšnoteikums ir, ka jauni baloni vai bumbas turpinās nomest ekrānu. Tāpēc mums ir nepieciešama funkcija, kas radīs jaunu balonu vai jaunu bumbu:

vietējā funkcija addNewBalloonOrBomb () vietējā startX = math.random (display.contentWidth * 0,1, display.contentWidth * 0,9) if (math.random (1,5) == 1) then - BOMB! vietējā bumba = display.newImage ("bomb.png", startX, -300) physics.addBody (bumba) bomb.enterFrame = offscreen Runtime: addEventListener ("enterFrame", bomb) bumba: addEventListener ("touch", bombTouched) else - Balloon local balloon = display.newImage ("red_balloon.png", startX, -300) physics.addBody (balloon) balloon.enterFrame = offscreen Runtime: addEventListener ("enterFrame", balloon) balloon: addEventListener ("touch", balloonTouched) gala beigas

Funkcijas pirmā rinda izlemj, no kurienes balons nokrist x lidmašīna. Ja balons vai bumba vienmēr nokristu pa vidu, tas nebūtu ļoti interesanti! TātadstartX ir nejaušs skaitlis no 10 procentiem līdz 90 procentiem no ekrāna platuma.

Tālāk tiek izvēlēts nejaušs skaitlis no 1 līdz 5.Ja skaitlis ir 1, bumba tiks nomesta. Ja tas ir 2, 3, 4 vai 5, tad balons tiks nomests. Tas nozīmē, ka bumbas tiks nomestas aptuveni 20 procentus laika.

Bumba un balona kods ir diezgan līdzīgi. Vispirms tiek parādīts attēls (vai nu bumba, vai balons), izmantojotnewImage().x nostāja ir tādastartX kamēr tā y pozīcija ir iestatīta uz -300, t.i., ekrāna augšpusē. Iemesls tam ir tas, ka mēs vēlamies, lai objekts nokrīt no ekrāna laukuma redzamajā zonā un pēc tam no apakšas. Tā kā mēs izmantojam 2D ​​fizikas motoru, ir labi dot objektam nelielu sākotnējo attālumu, lai tas varētu nokrist, lai tas varētu iegūt zināmu ātrumu.

Zvans uzphysics.addBody () uzņem attēlu, kuru ielādējis newImage () un pārvērš to par objektu fizikas dzinējā. Tas ir ļoti spēcīgi. No jebkura attēla faila var izveidot ķermeni, kas reaģē uz smagumu un sadursmēm, vienkārši piezvanotfizika.addBody ().

Pēdējās trīs bumbiņas vai balona koda līnijas uzstādīja klausītājus. IestatīšanaenterFrame īpašums pasaka Koronai, kura funkcija izsaukt katru kadru un zvanuRuntime: addEventListener () nosaka to. Visbeidzot zvans uzbalons: addEventListener () pasaka Koronai, kura funkcija jāizsauc, ja tiek pieskārusies bumba vai balons.

Un tagad spēle ir gandrīz pabeigta. Mums vienkārši vajadzīgas vēl divas koda rindiņas:

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

Pirmā līnija liek tieši pirmajai bumbiņai vai balonam nokrist, skaidri izsaucotaddNewBalloonOrBomb (). Otrajā rindā tiek uzstādīts taimeris, kurš piezvanīsaddNewBalloonOrBomb () ik pēc pussekundes (500 milisekundes). Tas nozīmē, ka jauns balons vai bumba kritīs ik pēc pussekundi.

Tagad spēli varat palaist emulatorā.

Šeit ir pilns main.lua saraksts, pilnu šīs spēles projekta avota kodu var atrast šeit vietnē GitHub.

-------------------------------------------------- --------------------------------------- - - krītoša balona un bumbas spēle - Raksta Gerijs Simss par ------------------------------------------- ---------------------------------------------- - Sāciet fizikas dzinējs vietējā fizika = nepieciešama ("fizika") physics.start () - aprēķiniet pusi no ekrāna platuma un augstuma pusiW = display.contentWidth * 0,5 halfH = display.contentHeight * 0.5 - fona vietējā iestatīšana bkg = display.newImage ("night_sky.png", halfW, halfH) - Score score = 0 scoreText = display.newText (score, halfW, 10) - Tiek izsaukts, kad spēlētājs piesit balonam - Palieliniet punktu skaitu par 1 vietējo funkciju balloonTouched ( notikums) ja (event.phase == "sākās"), tad Runtime: removeEventListener ("enterFrame", event.self) event.target:removeSelf () score = score + 1 scoreText.text = score end end - Called when the bumba tiek piespiesta spēlētājam - puse no rezultāta kā soda vietējā funkcija bombTouched (event) if (event.phase == "sākās"), tad Runtime: removeEventListener ("enterFrame", event.self) event.target:removeSelf () score = math.floor (score * 0,5) scoreText.text = score end end - izdzēsiet objektus, kas ir nokrituši no ekrāna apakšdaļā vietējā funkcija ārpus ekrāna (pats, notikums), ja (self.y == nulle), pēc tam atgrieziet beigas, ja (self.y> display.contentHeight + 50), tad Runtime: removeEventListener ("enterFrame", self) self: removeSelf () beigas - pievienojiet jaunu krītošo balonu vai bumbas vietējo funkciju addNewBalloonOrBomb () - red_ballon.png un bomb.png varat atrast GitHub repo vietējā startX = math.random (display.contentWidth * 0,1, display.contentWidth * 0,9) ja (math.random (1,5) == 1), tad - BOMB! vietējā bumba = display.newImage ("bomb.png", startX, -300) physics.addBody (bumba) bomb.enterFrame = offscreen Runtime: addEventListener ("enterFrame", bomb) bumba: addEventListener ("touch", bombTouched) else - Balloon local balloon = display.newImage ("red_balloon.png", startX, -300) physics.addBody (balloon) balloon.enterFrame = offscreen Runtime: addEventListener ("enterFrame", balloon) balloon: addEventListener ("touch", balloonTouched) end end - Pievienojiet jaunu balonu vai bumbu tagad addNewBalloonOrBomb () - Turpiniet pievienot jaunu balonu vai bumbu ik pēc 0,5 sekundēm timer.performWithDelay (500, addNewBalloonOrBomb, 0)

Nākamie soļi

Nākamais solis ir spēlēt spēli reālā Android ierīcē. Lai izveidotu .apk failu, noklikšķiniet uz File-> Build for Android… un aizpildiet laukus. Rezultāts būs .apk fails, kuru varēsit nokopēt ierīcē un pēc tam instalēt. Jums būs jāpārliecinās, ka esat konfigurējis savu ierīci, lai atļautu instalēt lietotni no nezināmiem avotiem. Amazon par to ir laba dokumentācija, jo tas ir jāiestata arī Amazon Appstore instalēšanai. Corona ir arī rokasgrāmata par to, kā parakstīt, veidot un pārbaudīt savu lietotni Android ierīcēs.

Kad spēle ir veiksmīgi instalēta jūsu ierīcē, nākamā lieta, kas jādara, ir spēles uzlabošana. Piemēram, kāpēc nemēģināt pievienot “pop” vai “bang” skaņu visam, kas tiek piespiests balonam vai bumbai. Corona tam ir API:media.playEventSound ().

Vai kāpēc nemēģināt pievienot trešā veida objektus, teiksim, superierīce, kas divkāršo pašreizējo partitūru, vai kā būtu ar fona mūziku?

Satīt

Spēļu rakstīšana ar Corona notiek diezgan vienkārši, jo SDK apstrādā tādas lietas kā OpenGL, un tajā ir iebūvēts 2D fizikas motors. Arī Lua ir viegli iemācīties, un tai nevajadzētu būt grūti ikvienai, kurai ir vismaz minimāla programmēšanas pieredze. Coronalabs vietnē ir daudz dokumentācijas, ieskaitot daudz rokasgrāmatu un konsultāciju.

Mazāk nekā 100 koda rindās mums ir darbojoša spēle. Labi, ka tā neuzvarēs nevienu balvu, tomēr tas parāda Corona SDK jaudu un elastību.

Ja ir kāda kategorija, kura trūkt HBO, tā ir komēdija. Pievilcīgai filmu pakalpojum ne tikai traumēm kar plakanā filma, bet arī rada ava jautra komēdija eanu un filma....

Neatkarīgi no tā, vai aņemat HBO, izmantojot tradicionālo kabeļtelevīzija kanālu vai traumējot HBO Now, premium filmu un TV pakalpojumā ir katāma imtiem pašreizējo un klaiko filmu. HBO filmu izvēle ma...

Skaties