Az első Android játék írása a Corona SDK használatával

Szerző: Randy Alexander
A Teremtés Dátuma: 1 Április 2021
Frissítés Dátuma: 26 Június 2024
Anonim
Az első Android játék írása a Corona SDK használatával - Alkalmazások
Az első Android játék írása a Corona SDK használatával - Alkalmazások

Tartalom


A Google Play Áruház legnépszerűbb kategóriája mindig a Játékok volt. Bár valószínűleg mindannyian olyan kulcsfontosságú termelékenységi alkalmazásokat használunk, mint egy böngésző, egy e-mail kliens és az azonnali üzenetküldő alkalmazás, a játék továbbra is fontos része a mobil élménynek. Tehát nem meglepő, hogy sokan, akik meg akarják tanulni az Android fejlesztését, játékkal akarják kezdeni. Legyünk őszinték, a játék írása teljes terhelésnél szórakoztatóbb, mint a termelékenységi alkalmazás fejlesztése!

Az Android hivatalos nyelve a Java, a hivatalos fejlesztési környezet az Android Studio. Ha szeretné megvizsgálni a Java-t, akkor javaslom a Java alapok bemutatóját, és ha meg szeretné tanulni, hogyan kell alkalmazást írni az Android Studio segítségével, akkor azt javaslom, hogy nézd meg az első Android-alkalmazás megírásának bemutatóját. A Java és az Android stúdió azonban nem az egyetlen fejlesztési módszer az Android számára. Az elérhető nyelvek és SDK-k áttekintését az útmutatóban találja: Android alkalmazásokat szeretnék fejleszteni - Milyen nyelveket kell megtanulnom?


A programozási nyelvek útmutatójában említett egyik SDK a Corona, egy harmadik fél SDK, amelyet elsősorban játékok írására terveztek. A Java helyett a Corona a Lua-t, egy gyors szkriptnyelvet használja, amelyet könnyű megtanulni, de nagy teljesítményű. A Corona azonban nem az egyetlen mobiljáték-SDK, amely a Lua-t használja, más közismert példák a Cocos2d-X, a Marmalade és a Gideros.

letöltés és telepítés

A Corona használatának megkezdéséhez le kell töltenie és telepítenie az SDK-t. Lépjen a Corona webhelyre, és nyomja meg a letöltés gombot. A készlet letöltése előtt létre kell hoznia egy fiókot (amely ingyenes). Ha valódi .apk fájlt szeretne létrehozni, ahelyett, hogy a programot az emulátorban futtatná, telepítenie kell a Java 7 szoftvert, azonban nem kell telepítenie az Android SDK-t. A Java 7 fejlesztőkészlet telepítéséhez keresse fel az Oracle webhelyét, keresse meg a „Java SE Development Kit 7u79” című részt, és töltse le a PC-re a verziót.


A Corona telepítése után aktiválnia kell azt. Ez egy egyszeri folyamat, amely ingyenes. Indítsa el a Corona Simulator-ot, és fogadja el az engedélyt. Írja be a letöltéshez használt e-mail címet és jelszót, majd kattintson a Bejelentkezés gombra.

A projekt indítása

A Corona Simulatoron belül kattintson az „Új projekt” lehetőségre. Írja be alkalmazásának nevét az „Alkalmazás neve:” mezőbe, és hagyja a többi beállítást alapértelmezés szerint. Kattintson az „OK” gombra.

Most három ablak jelenik meg. Az első kettő a Corona Simulator és a Corona Simular Output. A Corona egy fájlkezelő ablakot is megnyit a projekt fájljaival.

A projekt könyvtárban levő fájlok többsége (körülbelül 23 közülük) az alkalmazás ikonjára vonatkozik! Nekünk jelenleg a legfontosabb fájl main.lua, mivel itt írjuk be alkalmazásunk kódját.

Bevezetés a Lua-ba

Mielőtt belekezdenénk a kódba, sípoló turnét kell készítenünk Lua-ban. A Lua tolmács (ne feledje, hogy ez egy szkriptnyelv, és nem egy fordított nyelv) elérhető Windows, OS X és Linux rendszerekhez. Ennek ellenére be van építve a Coronába, így ebben az időben nem kell külön telepítenie. A Lua-val való játék legegyszerűbb módja az online élő demonstráció használata.

Nagyon sok jó útmutatót talál a Lua-ról az interneten, és át kell tekintenie a Lua Reference Manual, a Lua programozása, a The.Lua.Tutorial és a The Tutorials Point Lua Tutorial-t.

Itt van egy kis Lua program, amely megmutatja a Lua néhány fő jellemzőjét:

Helyi függvény doubleIt (x) visszatér x * 2 vége i = 1,10,1 esetén x = doubleIt (i), ha (x == 10), akkor nyomtasson ("tíz") egyébként nyomtasson (doubleIt (i)) vége

A fenti kód három fontos Lua konstrukciót mutat: függvényeket, hurkokat és if utasításokat. A funkció doubleIt () nagyon egyszerű, csak megduplázza az átadott paramétert x.

A fő kód a mert hurok 1-től 10-ig. Felhívja doubleIt () minden iterációhoz. Ha a visszatérési érték 10 (azaz mikor én 5), akkor a kód „tíz” -t kinyomtat, különben csak kinyomtatja az eredményt doubleIt ().

Ha rendelkezik valamilyen kódolási tapasztalattal, akkor a példakódnak elég könnyen követhetőnek kell lennie. Ha néhány alapvető programozást szeretne megtanulni, azt javaslom, hogy használja a fent hivatkozott erőforrások egy részét a készségek javításához.

A játék írása

Alapvető programok írása Coronában egyszerű. Csak egy fájllal kell aggódnia, main.lua, és hagyja, hogy Corona végezzen minden nehéz emelést. A játék, amelyet írni fogunk, egy egyszerű „csap” játék. Egy ballon vagy bomba meghibásodik a képernyőn. Ha a játékos megüti a léggömböt, pontot szerez, bombát dob, akkor a pontszám büntetésként kettővel oszlik meg. A szerkeszteni kívánt kód megírásához main.lua. Ezt megteheti bármilyen szövegszerkesztőben.

A Corona SDK beépített 2D-es fizikai motorral rendelkezik, ami a játék megépítését nagyon egyszerűvé teszi. A játék megírásának első lépése a fizikai motor inicializálása:

helyi fizika = megköveteli ("fizika") physics.start ()

A kód meglehetősen magától értetődő. A modul fizika betöltődik és inicializálódik, hozzá van rendelve a változóhoz fizika. A motor engedélyezésephysics.start () nak, nek hívják.

Ezután hozunk létre néhány hasznos változót, amelyek nemcsak az egyszerű játékhoz, hanem a bonyolultabb játékokhoz is hasznosak lesznek. halfW és halfH tartsa meg a képernyő képernyő szélességének és a képernyő magasságának felét:

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

Az kijelző objektum egy előre meghatározott objektum, amelyet a Corona globálisan elérhetővé tesz.

Most jön az első lépés, amely valójában valami történik meg a képernyőn:

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

Olyan tulajdonságok mellett, mint a contentHeight és contentWidth, az kijelző Az objektumnak sok hasznos funkciója is van. Az Új kép() funkció leolvassa a képfájlt (ebben az esetben a .png fájlt), és megjeleníti a képernyőn. A megjelenített objektumokat rétegekként renderelik, tehát mivel ez az első kép, amelyet a képernyőre helyezünk, akkor mindig a háttér lesz (kivéve, ha a kód kifejezetten megteszi valamit ennek megváltoztatására). A paraméterek halfW és halfH mondja Corona-nak, hogy helyezze a képet közepére.

Ezen a ponton futtathatja a kódot az emulátorban, és megnézheti a háttérképet. Ha elmenti a fájlt, akkor az emulátor észreveszi, hogy a fájl megváltozott, és felajánlja az újraindítást. Ha ez nem történik meg, akkor használja a Fájl-> Újraindítás menüpontot.

Mivel a felhasználó pontokat szerez a léggömbök megérintéséért, inicializálnunk kell egy pontszámváltozót, és meg kell jeleníteni a pontszámot a képernyőn:

pontszám = 0 scoreText = display.newText (pontszám, félW, 10)

A pontszámot a képzeletbeli elnevezésű változóban kell tartani pontszám,és scoreText az az objektum, amely megjeleníti a pontszámot. Tetszik Új kép(), newText () tegyen valamit a képernyőre, ebben az esetben szöveget. Mivel scoreText globális változó, akkor bármikor megváltoztathatjuk a szöveget. De hamarosan eljutunk ehhez.

Újraindíthatja az emulátort, és a képernyő teteje felé láthatja a 0-as pontszámot.

Balra: Csak a háttér. Jobb: háttér és pontszám.

Most jön egy kicsit trükkösebb, de ne aggódjon, magyarázatként ezt magyarázom:

helyi funkciós ballonTouched (esemény), ha (event.phase == "elkezdődött"), akkor Runtime: removeEventListener ("enterFrame", event.self) event.target:removeSelf () score = score + 1 scoreText.text = score end end

A fenti kód definiálja az úgynevezett függvényt balloonTouched () amelyet minden alkalommal felhívnak egy ballon megütésénél. Még nem mondtuk Coronának, hogy hívja meg ezt a funkciót minden alkalommal, amikor megérinti a ballont, ez később jön, de ha ezt megtesszük, akkor ezt a funkciót hívjuk meg.

A tapintás vagy érintés eseményei több szakaszból állnak, amelyek közül sok támogatja a húzást. A felhasználó ujját az objektumra helyezi, ez a „kezdő” szakasz. Ha bármelyik irányba csúsztatják az ujjukat, akkor az a „mozgatott” fázis. Amikor a felhasználó felemeli az ujját a képernyőn, akkor ez a „befejező” szakasz.

Az első sor balloonTouched () ellenőrzi, hogy a „kezdő” szakaszban vagyunk. Szeretnénk eltávolítani a ballont, és a lehető leghamarabb növelni a pontszámot. Ha a funkciót ismét meghívják más fázisokra, például „befejeződött”, akkor a funkció nem tesz semmit.

Benneha Az utasítás négy sorból áll. Keressük meg az első kettőt, mivel egyszerűbbek.pontszám = pontszám + 1 csak növeli a pontszámot egyvel ésscoreText.text = pontszám megváltoztatja a képernyőn megjelenő pontozási szöveget, hogy tükrözze az új pontszámot. Emlékszel, hogyan mondtam eztscoreText globális volt, és bárhová elérhető volt, nos, ezt itt csináljuk.

Most az első két sorra. Miután egy ballon vagy bomba esik a képernyő aljára, továbbra is létezik az alkalmazás memóriájában, csak nem látja. A játék előrehaladtával ezen képernyőn kívüli objektumok száma folyamatosan növekszik. Ezért olyan mechanizmussal kell rendelkeznünk, amely törli a tárgyakat, amikor azok nem láthatók. Ezt egy úgynevezett függvényben csináljukoffscreen, amelyet még nem írtunk. Ezt a funkciót keretenként egyszer hívják meg a játék során. Miután megérintették a léggömböt, törölnünk kell azt, és el kell távolítanunk a hívást, amely ellenőrzi, hogy a léggömb nem lett-e képernyőn.

A vonalevent.target:removeSelf () törli a ballont. Érintési esemény bekövetkezésekor a figyelő funkció egyik paramétere aesemény paraméter. Megmondja a függvényt az eseményről és az esemény típusától, pl.event.phase. Azt is elmondja nekünk, hogy melyik léggömböt csaptak le,event.target. AzremoveSelf () A függvény elvégzi azt, amit mond, törli az objektumot (ebben az esetben egy ballont).

Az előző sor eltávolítja az „enterframe” hallgatót, ezt a funkciót hívják minden képkocka számára annak ellenőrzésére, hogy a ballon leesett-e a képernyő aljáról. Ezt részletesebben megvizsgáljuk, amikor aoffscreen figyelő funkció.

Tehát, hogy emlékeztessem.balloonTouched ()ellenőrzi, hogy ez a tapintási sorozat kezdete. Ezután eltávolítja az „enterframe” figyelőt, amelyet minden képkockanak hívnak, hogy megnézze, vajon a ballon leesett-e a képernyő aljáról. Ezután törli a ballont, növeli a pontszámot, és megjeleníti az új pontszámot.

Ez volt a léggömbök esetében, most szükségünk van valami hasonlóra a bombákhoz:

bomb helyi funkciója (esemény), ha (esemény.fázis == "elkezdődött"), majd futásidejű: removeEventListener ("enterFrame", esemény. önálló) event.target:removeSelf () score = math.floor (score * 0,5) scoreText.text = pontszám vége vége

Mint láthatja, a kód nagyon hasonló azzal a kivétellel, hogy a pontszám növelése helyett a pontszámot megszorozzák 0,5-cel (azaz osztva 2-vel). Az math.floor () funkció lekerekíti a pontszámot a legközelebbi egész számra. Tehát ha a játékos 3-as pontszámot szerezne és bombát dobott, akkor az új pontszám 1, nem pedig 1,5 lesz.

Megemlítettem a offscreen () funkció korábban. Ezt a funkciót minden képkocka el fogja hívni annak ellenőrzésére, hogy egy objektum eltűnt-e a képernyőn. Íme a kód:

helyi funkciót lefedő képernyő (önálló, esemény), ha (self.y == nulla), majd térjen vissza, ha (self.y> display.contentHeight + 50), majd Runtime: removeEventListener ("enterFrame", self) self: removeSelf () end end

A számítás során versenyhelyzetnek nevezzük a helyzetet. Itt történik két dolog, de az egyik előbb, vagy a másik előbb történhet meg. Ez egy verseny. Egyes versenyfeltételek láthatatlanok, mert úgy tűnik, hogy egy dolog először mindig megtörténik, de érdekes hibákat okozhatnak abban a napban, megfelelő feltételek mellett, előbb a másik dolog történik meg, majd a rendszer meghibásodik!

Ebben az egyszerű játékban versenyfeltételek vannak, mert két dolog történhet nagyon közel egymáshoz: egy léggömb megcsapolása és a offscreen () funkció hívása, hogy megnézze, nem lépett-e le a ballon a képernyőn. Ennek eredményeként hívható be a ballon törlésére szolgáló kód, majd a offscreen () funkciót hívják (ami másodpercenként 30-szor történik). Hogy megkerülje ezt a furcsa eseménysorozatot, a offscreen () funkciónak ellenőriznie kell, hogy a y az objektum értéke nulla (null) vagy sem. Ha az nulla akkor ez azt jelenti, hogy az objektumot már törölték, tehát haladj tovább, nem ezek a droidok, amelyeket keresünk.

Ha az objektum még mindig játékban van, akkor ellenőrizze annak helyzetét, ha 50 pixel van a képernyőn, majd törölje le, és távolítsa el a hallgatót úgy, hogy offscreen () funkciót nem hívják újra ehhez az objektumhoz. A kód annak biztosításáraoffscreen () minden képkocka része a kód következő szakaszának.

A játék teljes előfeltétele, hogy az új léggömbök vagy bombák továbbra is a képernyőn essenek. Ezért szükségünk van egy olyan funkcióra, amely új ballont vagy új bombát hoz létre:

helyi függvény addNewBalloonOrBomb () local startX = math.random (display.contentWidth * 0,1, display.contentWidth * 0.9) if (math.random (1,5) == 1) then - BOMB! helyi bomba = display.newImage ("bomb.png", startX, -300) physics.addBody (bomba) bomb.enterFrame = offscreen Runtime: addEventListener ("enterFrame", bomb) bomba: addEventListener ("touch", bombTouched) else - Balloon local ballon = display.newImage ("red_balloon.png", startX, -300) physics.addBody (ballon) balloon.enterFrame = offscreen Runtime: addEventListener ("enterFrame", ballon) ballon: addEventListener ("touch", "touch", balloonTouched) vég vége

A függvény első sora eldönti, hogy a ballon mikor fog esni x repülőgép. Ha a ballon vagy a bomba mindig leesett a közepére, az nem lesz nagyon érdekes! Ígystartx egy véletlenszerű szám a képernyő szélességének 10–90 százaléka között.

Ezután véletlenszerű számot választunk 1 és 5 között.Ha a szám 1, akkor egy bomba eldobik. Ha ez 2, 3, 4 vagy 5, akkor egy ballon leesik. Ez azt jelenti, hogy az idő 20% -a körül bombák esnek le.

A bomba és a ballon kód nagyon hasonló. Először a kép (akár bomba, akár ballon) jelenik meg a gombbalÚj kép(). a x a helyzet azstartx míg a y helyzetét -300-ra állítják, azaz a képernyő tetejénél. Ennek oka az, hogy azt akarjuk, hogy az objektum a képernyő területén kívülről esjen a látható területre, majd az aljára. Mivel a 2D-es fizikai motort használjuk, jó, ha az objektumnak egy kis távolsága van a kezdeti esés távolságának, így növelhetjük bizonyos sebességet.

A hívásphysics.addBody () elveszi a képet Új kép() és objektummá változtatja a fizikai motorban. Ez nagyon erős. Bármely képfájlból test készíthető, amely a gravitációra és az ütközésekre csak hívással reagálphysics.addBody ().

A bomba vagy a ballon kód utolsó három sora beállította a hallgatókat. AenterFrame Az ingatlan megmondja Coronának, hogy melyik funkció hívja be az összes keretet és a hívástHossza: addEventListener () beállítja. Végül a hívásléggömb: addEventListener () megmondja Coronának, hogy melyik funkciót kell hívni, ha megérinti a bombát vagy a ballont.

És most a játék majdnem kész. Csak két további sorra van szükségünk:

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

Az első sor kifejezetten felhívja az első bombát vagy ballontaddNewBalloonOrBomb (). A második sor beállít egy időzítőt, amely felhívjaaddNewBalloonOrBomb () fél másodpercenként (500 milliszekundum). Ez azt jelenti, hogy egy új ballon vagy bomba fél másodpercenként esik le.

Most már futtathatja a játékot az emulátorban.

Itt található a main.lua teljes listája, a játék teljes projekt forráskódja megtalálható itt a GitHub oldalon.

-------------------------------------------------- --------------------------------------- - - Hulló ballon és bomba játék - Írta: Gary Sims - ------------------------------------------- ---------------------------------------------- - Indítsa el a fizika motor helyi fizika = megköveteli ("fizika") physics.start () - Számolja ki a képernyő szélességének és magasságának felétW = display.contentWidth * 0.5 halfH = display.contentHeight * 0.5 - Állítsa be a háttér helyi háttérét bkg = display.newImage ("night_sky.png", halfW, halfH) - Pontszám = 0 scoreText = display.newText (pontszám, halfW, 10) - Hívásra kerül, amikor a játékos megérinti a ballont - Növelje a pontszámot 1 helyi funkcióval ballonTouched ( esemény) if (event.phase == "kezdődött"), akkor futási idő: removeEventListener ("enterFrame", event.self) event.target:removeSelf () score = score + 1 scoreText.text = score end end - Felhívásra kerül, amikor a bombát a játékos megüti - A mérkőzés felét a helyi büntetés helyi funkciójaként bombTouched (esemény), ha (event.phase == "kezdődött"), majd futásidejű: removeEventListener ("enterFrame", event.self) event.target:removeSelf () score = math.floor (score * 0,5) scoreText.text = score end end - Az objektumok törlése, amelyek leestek a a képernyő alján helyi funkció kikapcsolva (ön, esemény), ha (self.y == null), majd térjen vissza, ha (self.y> display.contentHeight + 50), majd Runtime: removeEventListener ("enterFrame", self) self: removeSelf () end end - Adj hozzá új eső ballont vagy bomba helyi függvényét addNewBalloonOrBomb () - A red_ballon.png és bomb.png fájlokat a GitHub repo helyi startX = math.random fájljában (display.contentWidth * 0,1, display.contentWidth * 0,9) if (math.random (1,5) == 1) akkor - BOMB! helyi bomba = display.newImage ("bomb.png", startX, -300) physics.addBody (bomba) bomb.enterFrame = offscreen Runtime: addEventListener ("enterFrame", bomb) bomba: addEventListener ("touch", bombTouched) else - Balloon local ballon = display.newImage ("red_balloon.png", startX, -300) physics.addBody (ballon) balloon.enterFrame = offscreen Runtime: addEventListener ("enterFrame", ballon) ballon: addEventListener ("touch", "touch", balloonTouched) end end - Add egy új ballont vagy bombát most addNewBalloonOrBomb () - Add hozzá új ballont vagy bombát minden 0,5 másodpercenként timer.performWithDelay (500, addNewBalloonOrBomb, 0)

Következő lépések

A következő lépés a játék valódi Android-eszközön való lejátszása. .Apk fájl létrehozásához kattintson a File-> Build for Android… elemre, és töltse ki a mezőket. Az eredmény egy .apk fájl lesz, amelyet a készülékre másolhat, majd telepíthet. Gondoskodnia kell arról, hogy beállította-e eszközét az alkalmazás ismeretlen forrásokból történő telepítéséhez. Az Amazonnak van néhány jó dokumentációja erről, mivel ezt meg kell állítania az Amazon Appstore telepítéséhez. A Corona útmutatóval rendelkezik az alkalmazás aláírására, felépítésére és tesztelésére az Android készülékeken.

Miután a játékot sikeresen telepítette az eszközére, a következő lépés a játék fejlesztése. Például, miért ne próbálja meg hozzátenni egy „pop” vagy a „bumm” hangot, mindent, amire egy ballont vagy bombát megcsap. A Corona rendelkezik ehhez egy API-vel:media.playEventSound ().

Vagy miért nem próbálja meg hozzáadni egy harmadik típusú objektumot, mondjon egy szuperfokozást, amely megduplázza az aktuális pontszámot, vagy mi lenne egy háttérzenemel?

Wrap-up

A játékok írása a Corona-val meglehetősen egyértelmű, mert az SDK olyan dolgokat kezeli, mint az OpenGL, és tartalmaz egy beépített 2D fizikai motort. A Lua szintén könnyű megtanulni, és nem szabad nehéznek lennie senkinek, aki rendelkezik a minimális programozási tapasztalattal. A Coronalabs weboldalán sok dokumentum található, beleértve sok útmutatót és útmutatót.

Kevesebb mint 100 sorban van egy működő játék. Rendben, nem fog nyerni, bár megmutatja a Corona SDK erejét és rugalmasságát.

10 legjobb FPS játék az Androidra!

Laura McKinney

Június 2024

Az FP játékok (elő zemélyű lövöldöző játékok) az egyik legizgalmaabb játékműfaj. Ez az egyik legnépzerűbb műfaj valaha. Ezen felül zám...

Az ételzállítá valóban nagy ügy lez. A vállalatok világzerte felbukkannak. Céluk az, hogy ételeket zállítanak az éttermekből a kü...

Részvény