Píšete svoju prvú hru pre Android pomocou súpravy Corona SDK

Autor: Randy Alexander
Dátum Stvorenia: 1 Apríl 2021
Dátum Aktualizácie: 26 V Júni 2024
Anonim
Píšete svoju prvú hru pre Android pomocou súpravy Corona SDK - Aplikácie
Píšete svoju prvú hru pre Android pomocou súpravy Corona SDK - Aplikácie

Obsah


Najobľúbenejšou kategóriou v Obchode Google Play boli vždy Hry. Aj keď všetci pravdepodobne používame kľúčové aplikácie v oblasti produktivity, ako je webový prehľadávač, e-mailový klient a aplikácia na odosielanie okamžitých správ, hranie hier stále zostáva dôležitou súčasťou mobilného používania. Niet divu, že veľa ľudí, ktorí sa chcú naučiť vyvíjať pre Android, chce začať hrou. Buďme úprimní, písanie hry je celá záležitosť zábavnejšia ako vývoj aplikácie na zvýšenie produktivity!

Oficiálnym jazykom systému Android je Java a oficiálnym vývojovým prostredím je Android Studio. Ak sa chcete pozrieť do jazyka Java, navrhujem náš výukový program pre základy jazyka Java a ak sa chcete naučiť, ako napísať aplikáciu pomocou aplikácie Android Studio, potom vám odporúčame prečítať si náš tutoriál o písaní prvej aplikácie pre Android. Štúdio Java a Android však nie je jediným spôsobom, ako sa dá vyvinúť pre Android. Prehľad dostupných jazykov a súprav SDK nájdete v našom sprievodcovi: Chcem vyvinúť aplikácie pre Android - Aké jazyky by som sa mal naučiť?


Jednou z súprav SDK uvedených v príručke programovacích jazykov je Corona, súprava SDK tretích strán určená predovšetkým na písanie hier. Namiesto Java používa Corona Lua, rýchly skriptovací jazyk, ktorý sa dá ľahko naučiť, ale je výkonný. Corona však nie je jedinou mobilnou hernou súpravou SDK, ktorá používa Lua. Medzi ďalšie známe príklady patria Cocos2d-X, Marmalade a Gideros.

Stiahnite a nainštalujte

Ak chcete začať s programom Corona, budete si musieť stiahnuť a nainštalovať súpravu SDK. Prejdite na webovú stránku Corona a stlačte tlačidlo sťahovania. Pred stiahnutím súpravy budete musieť vytvoriť účet (ktorý je zadarmo). Ak chcete namiesto skutočného spustenia programu v emulátore vytvoriť skutočný súbor .apk, budete musieť nainštalovať Java 7, nebudete však musieť nainštalovať súpravu Android SDK. Ak chcete nainštalovať vývojovú súpravu Java 7, prejdite na webovú stránku spoločnosti Oracle, vyhľadajte časť s názvom „Java SE Development Kit 7u79“ a stiahnite si verziu pre svoj počítač.


Po nainštalovaní aplikácie Corona je potrebné ju aktivovať. Toto je jednorazový proces, ktorý je bezplatný. Spustite simulátor Corona a súhlaste s licenciou. Zadajte e-mailovú adresu a heslo, ktoré ste použili na stiahnutie, a kliknite na Prihlásiť sa.

Začatie projektu

V rámci aplikácie Corona Simulator kliknite na „Nový projekt“. Do poľa „Názov aplikácie:“ zadajte názov aplikácie a ostatné nastavenia nechajte v predvolenom nastavení. Kliknite na tlačidlo „OK“.

Teraz sa zobrazia tri okná. Prvé dva sú Corona Simulator a Corona Simular Output. Corona tiež otvorí okno prieskumníka súborov, ktoré zobrazuje súbory pre váš projekt.

Väčšina súborov (asi 23 z nich) v adresári projektu je pre ikonu aplikácie! Najdôležitejším súborom pre nás je práve teraz main.lua, pretože tu napíšeme kód pre našu aplikáciu.

Úvod do Lua

Predtým, ako sa pustíme do písania tohto kódu, musíme uskutočniť prehliadku Lua s informáciami. Tlmočník Lua (nezabudnite, že ide o skriptovací jazyk, nie kompilovaný jazyk) je k dispozícii pre systémy Windows, OS X a Linux. Je však zabudovaná v Corone, takže v tejto chvíli nemusíte inštalovať nič navyše. Najjednoduchší spôsob, ako si zahrať s Luou, je použitie živého dema online.

Nájdete veľa dobrých návodov o Lua online a mali by ste sa pozrieť na referenčnú príručku Lua, Programovanie v Lua, The.Lua.Tutorial a Tutorials Point Lua Tutorial.

Tu je malý program Lua, ktorý vám ukáže niektoré kľúčové vlastnosti Lua:

lokálna funkcia doubleIt (x) návrat x * 2 koniec pre i = 1,10,1 do x = doubleIt (i) ak (x == 10), potom tlač ("desať"), inak tlač (doubleIt (i)) koniec

Vyššie uvedený kód ukazuje tri dôležité konštrukty Lua: funkcie, slučky a príkazy if. Funkcia doubleIt () je veľmi jednoduchý, iba zdvojnásobí hodnotu parametra prešiel X.

Hlavný kód je a pre slučka od 1 do 10. To volá doubleIt () pre každú iteráciu. Ak je návratová hodnota 10 (t.j. kedy ja je 5), potom kód vytlačí „desať“, inak vytlačí iba výsledok doubleIt ().

Ak máte nejaké skúsenosti s kódovaním, postupujte podľa vzorového kódu. Ak sa chcete naučiť nejaké základné programovanie, navrhujem vám použiť niektoré z vyššie uvedených zdrojov na zdokonalenie vašich schopností.

Písanie hry

Písanie základných programov v Corone je jednoduché. Potrebujete iba starosti s jedným súborom, main.lua, a nechaj Coronu urobiť všetko ťažké zdvíhanie. Hra, ktorú sa chystáme napísať, je jednoduchá hra „tap“. Balón alebo bomba zlyhá na obrazovke. Ak hráč poklepe na balón, ktorý boduje, poklepe na bombu, potom sa skóre rozdelí ako 2 trest. Ak chcete napísať kód, musíte ho upraviť main.lua, Môžete to urobiť v ľubovoľnom textovom editore.

Corona SDK má vstavaný 2D fyzikálny engine, ktorý veľmi uľahčuje vytváranie hier. Prvým krokom pri písaní hry je inicializácia fyzického motora:

miestna fyzika = vyžadovať („fyzika“) fyzika.začať ()

Kód je celkom jasný. Fyzika modulu sa načíta a inicializuje, je priradená premennej fyzika, Na aktiváciu motoraphysics.start () sa volá.

Ďalej vytvoríme užitočné premenné, ktoré budú užitočné nielen pre túto jednoduchú hru, ale aj pre zložitejšie hry. halfW a halfH držte hodnoty pre polovicu šírky obrazovky a polovicu výšky obrazovky:

halfW = display.contentWidth * 0,5 halfH = display.contentHeight * 0.5

zobraziť objekt je preddefinovaný objekt, ktorý spoločnosť Corona globálne sprístupňuje.

Teraz prichádza prvý krok, ktorý skutočne spôsobí, že sa niečo stane na obrazovke:

local bkg = display.newImage ("night_sky.png", halfW, halfH)

Rovnako ako vlastnosti contentHeight a contentWidth, zobraziť objekt má tiež veľa užitočných funkcií. newImage () Funkcia číta obrazový súbor (v tomto prípade .png) a zobrazí ho na obrazovke. Objekty displeja sa vykresľujú vo vrstvách, takže keďže ide o prvý obrázok, ktorý umiestnime na obrazovku, bude to vždy pozadie (pokiaľ to kód výslovne neurobí). Parametre halfW a halfH povedzte Corone, aby umiestnila obrázok do stredu.

Teraz môžete spustiť kód v emulátore a zobraziť obrázok na pozadí. Ak uložíte súbor, emulátor si všimne, že sa súbor zmenil a ponúka sa znovu spustiť. Ak sa tak nestane, použite File-> Relaunch.

Keďže používateľ získa body za kliknutie na balóny, musíme inicializovať premennú skóre a skóre zobraziť na obrazovke:

score = 0 scoreText = display.newText (skóre, polovica, 10)

Skóre sa zachová vo imaginatívne pomenovanej premennej skórovať,a scoreText je objekt, ktorý zobrazuje skóre. Páči sa mi to newImage (), newText () dajte niečo na obrazovku, v tomto prípade text. od tej doby scoreText je globálna premenná, potom môžeme text kedykoľvek zmeniť. K tomu sa však čoskoro dostaneme.

Môžete znova spustiť emulátor a zobraziť skóre 0 smerom k hornej časti obrazovky.

Vľavo: Len pozadie. Vpravo: Pozadie a skóre.

Teraz prichádza niečo trochu zložitejšie, ale nebojte sa, vysvetlím to riadok po riadku:

local function balloonTouched (event) if (event.phase == "started"), potom Runtime: removeEventListener ("enterFrame", event.self) event.target:removeSelf () score = skóre + 1 scoreText.text = koniec konca skóre

Vyššie uvedený kód definuje funkciu nazývanú balloonTouched () ktorá sa bude volať po každom klepnutí na balón. Ešte sme nepovedali Corone, aby zavolala túto funkciu zakaždým, keď na kohútik klepnete, to príde neskôr, ale keď to urobíme, je to funkcia, ktorá sa volá.

Udalosti klepnutím alebo dotykom majú niekoľko fáz, z ktorých mnohé podporujú pretiahnutie. Užívateľ položí prst na objekt, toto je fáza „začala“. Ak posúvajú prst v ľubovoľnom smere, je to fáza „presunutia“. Keď používateľ zdvihne prst z obrazovky, je to „ukončená“ fáza.

Prvý riadok balloonTouched () kontrolujeme, že sme vo fáze „začatia“. Chceme odstrániť balón a zvýšiť skóre čo najskôr. Ak je funkcia volaná znova pre iné fázy ako „ukončené“, potom táto funkcia nič neurobí.

Vnútriak vyhlásenie sú štyri riadky kódu. Poďme sa najprv zaoberať poslednými dvoma, pretože sú jednoduchšie.skóre = skóre + 1 iba zvyšuje skóre o jeden ascoreText.text = skóre zmení text skóre na obrazovke tak, aby odrážal nové skóre. Pamätajte, ako som to povedalscoreText bol globálny a bolo možné k nemu pristupovať kdekoľvek, dobre to robíme tu.

Teraz pre prvé dva riadky. Keď balón alebo bomba spadne z dolnej časti obrazovky, stále existuje v pamäti aplikácie, jednoducho to nemôžete vidieť. Ako hra pokračuje, počet týchto objektov mimo obrazovky sa bude neustále zvyšovať. Preto musíme mať mechanizmus, ktorý odstráni objekty, keď budú mimo dohľadu. Robíme to vo funkcii zvanejoffscreen, ktoré sme ešte nenapísali. Táto funkcia sa počas hry volá raz za snímku. Po klepnutí na balón ho musíme odstrániť a odstrániť hovor, ktorý skontroluje, či sa balón nedostal mimo obrazovku.

Čiaraevent.target:removeSelf () odstráni balón. Ak dôjde k dotykovej udalosti, jedným z parametrov funkcie poslucháča jeudalosť parameter. Rozpráva funkciu o udalosti a o aký typ udalosti ide, napr.event.phase. Tiež nám hovorí, na ktorý balón bol ťuknutý,event.target. removeSelf () Funkcia robí to, čo hovorí, že to robí, vymaže objekt (v tomto prípade balónik).

Čiara pred tým odstráni poslucháča „enterframe“, čo je funkcia, ktorá sa nazýva každý rámec, aby sa zistilo, či balón spadol z dolnej časti obrazovky. Keď sa na to píšeme, na to sa pozrieme podrobnejšieoffscreen funkcia poslucháča.

Takže zhrnúť.balloonTouched ()skontroluje, či je to začiatok dotykovej sekvencie. Potom odstráni poslucháča „enterframe“, čo je funkcia, ktorá sa nazýva každý rámec, aby sa zistilo, či balónik spadol z dolnej časti obrazovky. Potom vymaže balón, zvýši skóre a zobrazí nové skóre.

To bolo pre balóny, teraz potrebujeme niečo podobné pre bomby:

local function bombTouched (event) if (event.phase == "started"), potom Runtime: removeEventListener ("enterFrame", event.self) event.target:removeSelf () score = math.floor (score * 0.5) scoreText.text = koniec konca skóre

Ako vidíte, kód je veľmi podobný s výnimkou, že namiesto zvýšenia skóre sa skóre vynásobí 0,5 (t. J. Delí sa 2). math.floor () funkcia zaokrúhľuje skóre na najbližšie celé číslo. Takže ak mal hráč skóre 3 a poklepal na bombu, nové skóre by bolo 1 a nie 1,5.

Spomenul som mimo záber () fungujú skôr. Táto funkcia sa bude volať každý rámec, aby sa skontrolovalo, či nejaký objekt nezmizol z obrazovky. Tu je kód:

lokálna funkcia offscreen (self, event) if (self.y == nil) potom return end if (self.y> display.contentHeight + 50) then Runtime: removeEventListener ("enterFrame", self) self: removeSelf () end end

Pri výpočte je situácia známa ako rasový stav. Na tomto mieste sa stanú dve veci, ale jedna sa môže stať skôr, niekedy sa druhá stane skôr. Je to rasa. Niektoré rasové podmienky nie sú vidieť, pretože sa zdá, že jedna vec sa vždy stane skôr, ale za jedného dňa môžu za určitých podmienok spôsobiť zaujímavé chyby, druhá sa stane najskôr a potom sa systém zlomí!

V tejto jednoduchej hre sa vyskytuje rasový stav, pretože sa môžu veľmi blízko pri sebe vyskytnúť dve veci: poklepanie balónika a mimo záber () volanie funkcie, aby ste zistili, či sa balón nedostal z obrazovky. Výsledkom je, že je možné zavolať kód na vymazanie balóna a potom mimo záber () vyvolá sa funkcia (ktorá sa stane 30 krát za sekundu). Ak chcete obísť túto nepárnu sekvenciu udalostí, postupujte takto: mimo záber () funkcia musí skontrolovať, či y hodnota objektu je nula (null) alebo nie. Keď to je nula potom to znamená, že objekt už bol odstránený, takže sa nehýbte droidmi, ktorých hľadáme.

Ak je objekt stále v hre, skontrolujte jeho polohu, ak zmizol z obrazovky 50 pixelov, odstráňte ho a odstráňte poslucháča tak, aby mimo záber () Funkcia nebude pre tento objekt znova volaná. Kód, ktorý to zabezpečímimo záber () sa nazýva každý rámec súčasťou ďalšej časti kódu.

Celý predpoklad tejto hry je, že nové balóniky alebo bomby budú aj naďalej klesať po obrazovke. Preto potrebujeme funkciu, ktorá vytvorí buď nový balónik alebo novú bombu:

lokálna funkcia addNewBalloonOrBomb () local startX = math.random (display.contentWidth * 0.1, display.contentWidth * 0.9) if (math.random (1,5) == 1) then - BOMB! local bomb = display.newImage ("bomb.png", startX, -300) physics.addBody (bomb) bomb.enterFrame = offscreen Runtime: addEventListener ("enterFrame", bomb)) bomba: addEventListener ("touch", bombTouched) inde - Balónový miestny balón = display.newImage ("red_balloon.png", startX, -300) physics.addBody (balón) balloon.enterFrame = offscreen Runtime: addEventListener ("enterFrame", balloon) balón: addEventListener ("touch", balloonTouched) koniec

Prvý riadok funkcie rozhodne, odkiaľ bude balón vypadnúť na X roviny. Ak balón alebo bomba vždy upadnú do stredu, nebude to veľmi zaujímavé! takstartx je náhodné číslo od 10 do 90 percent šírky obrazovky.

Ďalej sa vyberie náhodné číslo medzi 1 a 5.Ak je číslo 1, bomba bude vyhodená. Ak to bude 2, 3, 4 alebo 5, bude vypadnutý balón. To znamená, že bomby budú spadnuté okolo 20 percent času.

Bomba a balónový kód sú dosť podobné. Najprv sa zobrazí obrázok (bomba alebo balón) pomocounewImage(). jeho X pozícia je pozíciastartx zatiaľ čo jeho y poloha je nastavená na -300, t. j. mimo hornú časť obrazovky. Dôvodom je to, že chceme, aby objekt padal z vonkajšej strany obrazovky do viditeľnej oblasti a potom zospodu. Pretože používame 2D fyzikálny engine, je dobré dať objektu trochu počiatočnej vzdialenosti, aby spadol, takže môže získať určitú rýchlosť.

Výzva naphysics.addBody () nasníma obrázok načítaný newImage () a zmení ho na objekt vo fyzickom stroji. To je veľmi silné. Akýkoľvek obrazový súbor môže byť vyrobený do tela, ktoré reaguje na gravitáciu a kolízie iba volanímphysics.addBody ().

Poslucháči nastavili posledné tri riadky kódu bomby alebo balóna. NastavenieenterFrame Vlastnosť povie Corone, ktorá funkcia má volať každý rámec a volaťRuntime: addEventListener () nastaví to. Nakoniec zavolajtebalón: addEventListener () povie Corone, ktorá funkcia má volať, ak sa dotknete bomby alebo balóna.

A teraz je hra takmer dokončená. Potrebujeme iba ďalšie dva riadky kódu:

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

Prvý riadok spôsobí pádom úplne prvej bomby alebo balóna explicitným volanímaddNewBalloonOrBomb (), Druhý riadok nastavuje časovač, ktorý bude volaťaddNewBalloonOrBomb () každých pol sekundy (500 milisekúnd). To znamená, že nový balón alebo bomba padne každú pol sekundu.

Teraz môžete spustiť hru v emulátore.

Tu je kompletný zoznam main.lua, úplný zdrojový kód projektu pre túto hru nájdete tu na GitHub.

-------------------------------------------------- ------------------------------------------- - - Padajúca bomba a bomba - Napísal Gary Sims pre - ----------------------------------------------- -------------------------------------------------- - Spustite engine fyziky miestna fyzika = vyžadovať („fyzika“) fyzika.štart () - Vypočítajte polovicu šírky a výšky obrazovky polovicu W = display.contentWidth * 0,5 halfH = display.contentHeight * 0,5 - Nastavte miestne pozadie bkg = display.newImage ("night_sky.png", halfW, halfH) - skóre skóre = 0 scoreText = display.newText (skóre, halfW, 10) - volané, keď sa hráč dotkne balónika - zvýšenie skóre o 1 miestnu funkciu balloonTouched ( event) if (event.phase == "začal"), potom Runtime: removeEventListener ("enterFrame", event.self) event.target:removeSelf () score = score + 1 scoreText.text = end end score - Vyvolá sa, keď hráč sa dotkne bomby - polovica skóre ako trestná funkcia miestnej funkcie bombardovaná (udalosť), ak (event.phase == "začal"), potom runtime: removeEventListener ("enterFrame", event.self) event.target:removeSelf () score = math.floor (score * 0.5) scoreText.text = score end end - Odstráňte objekty, ktoré spadli z spodná časť obrazovky miestna funkcia mimo obrazovky (self, event) if (self.y == nil), potom návrat konca if (self.y> display.contentHeight + 50) potom Runtime: removeEventListener ("enterFrame", self) self: removeSelf () end end - Pridajte novú padajúcu balónikovú alebo bombu lokálnu funkciu addNewBalloonOrBomb () - nájdete red_ballon.png a bomb.png v repozitári GitHub local startX = math.random (display.contentWidth * 0.1, display.contentWidth * 0,9) ak (matematika (1,5) == 1), potom - BOMB! local bomb = display.newImage ("bomb.png", startX, -300) physics.addBody (bomb) bomb.enterFrame = offscreen Runtime: addEventListener ("enterFrame", bomb)) bomba: addEventListener ("touch", bombTouched) inde - Balónový miestny balón = display.newImage ("red_balloon.png", startX, -300) physics.addBody (balón) balloon.enterFrame = offscreen Runtime: addEventListener ("enterFrame", balloon) balón: addEventListener ("touch", balloonTouched) end end - Pridajte nový balón alebo bombu teraz addNewBalloonOrBomb () - Neustále pridávajte nový balón alebo bombu každých 0,5 sekundy .performWithDelay (500, addNewBalloonOrBomb, 0)

Ďalšie kroky

Ďalším krokom je hranie hry na skutočnom zariadení s Androidom. Ak chcete vytvoriť súbor .apk, kliknite na File-> Build for Android… a vyplňte polia. Výsledkom bude súbor .apk, ktorý môžete skopírovať do zariadenia a nainštalovať. Musíte sa ubezpečiť, že ste svoje zariadenie nakonfigurovali tak, aby umožňovalo inštaláciu aplikácie z neznámych zdrojov. Amazon má k tomu dobrú dokumentáciu, pretože ju musíte tiež nainštalovať, aby ste nainštalovali Amazon Appstore. Súčasťou aplikácie Corona je aj návod, ako podpísať, zostaviť a otestovať vašu aplikáciu na zariadeniach s Androidom.

Ak je hra úspešne nainštalovaná na vašom zariadení, je potrebné vylepšiť hru. Napríklad, prečo neskúšať pridať zvuk „pop“ alebo „tresk“, všetko, na čo sa odpáli balón alebo bomba. Corona má na to API:media.playEventSound ().

Alebo prečo neskúšať pridať tretí typ objektu, povedzme super vylepšenie, ktoré zdvojnásobí súčasné skóre alebo čo tak nejaká hudba na pozadí?

Zabaliť

Písanie hier s Coronou je celkom priamočiaro, pretože SDK sa zaoberá vecami ako OpenGL a obsahuje zabudovaný 2D fyzikálny engine. Lua sa tiež ľahko učí a nemala by byť náročná pre každého, kto má minimálne programovacie skúsenosti. Internetová stránka Coronalabs obsahuje veľa dokumentácie vrátane mnohých príručiek a návodov.

V menej ako 100 riadkoch kódu máme pracovnú hru. OK, nebude to vyhrávať žiadne ceny, ukazuje to však silu a flexibilitu sady Corona SDK.

éria Honor 20 je vzdialená necelý týždeň a značka Huawei už podvádza niekoľko detailov. Teraz to vyzerá, že Honor 20 už úplne unikol WinFuturea vyzerá to ako ch...

Vzhľadom na to, že Honor 20 a Honor 20 Pro a začnú o dva týždne (včera me a dozvedeli všetko o Honor 20 Lite), vieme len veľmi málo o pripravovaných vlajkových lodiach trednej...

Naše Odporúčanie