Oma esimese Androidi mängu kirjutamine Corona SDK abil

Autor: Randy Alexander
Loomise Kuupäev: 1 Aprill 2021
Värskenduse Kuupäev: 26 Juunis 2024
Anonim
Oma esimese Androidi mängu kirjutamine Corona SDK abil - Rakendused
Oma esimese Androidi mängu kirjutamine Corona SDK abil - Rakendused

Sisu


Google Play poe populaarseim kategooria on alati olnud Mängud. Ehkki me kõik kasutame tõenäoliselt peamisi produktiivsuserakendusi nagu veebibrauser, e-posti klient ja kiirsuhtlusrakendus, on mängimine endiselt oluline osa mobiilikogemustest. Seega pole üllatav, et paljud inimesed, kes soovivad õppida arendama Androidi, tahavad alustada mängu koostamisega. Olgem ausad, mängu kirjutamine on terve koormus lõbusam kui produktiivsuserakenduse arendamine!

Androidi ametlik keel on Java ja ametlik arenduskeskkond on Android Studio. Kui soovite uurida Java-d, siis soovitan meie Java-põhitõdesid ja kui soovite õppida rakenduse kirjutamist Android Studio abil, siis soovitan teil tutvuda meie esimese Androidi-rakenduse kirjutamise õpetusega. Java ja Androidi stuudio pole siiski ainsad võimalused Androidi arendamiseks. Kättesaadavate keelte ja SDK-de ülevaate leiate meie juhendist: tahan arendada Androidi rakendusi - milliseid keeli peaksin õppima?


Üks programmeerimiskeelte juhendis mainitud SDKdest on Corona, kolmanda osapoole SDK, mis on mõeldud peamiselt mängude kirjutamiseks. Java asemel kasutab Corona Lua - kiiret skriptikeelt, mida on lihtne õppida, kuid mis on võimas. Corona pole aga ainus Lua kasutav mobiilimängude SDK, teiste tuntud näidete hulka kuuluvad näiteks Cocos2d-X, Marmalade ja Gideros.

Laadige alla ja installige

Corona kasutamise alustamiseks peate alla laadima ja installima SDK. Minge Corona veebisaidile ja klõpsake allalaadimisnupul. Enne komplekti allalaadimist peate looma konto (mis on tasuta). Kui soovite üles ehitada tegeliku .apk-faili, selle asemel et lihtsalt oma programmi emulaatoris käitada, peate installima Java 7, kuid te ei pea installima Androidi SDK-d. Java 7 arenduskomplekti installimiseks minge Oracle'i veebisaidile, otsige jaotist “Java SE arenduskomplekt 7u79” ja laadige oma arvuti jaoks alla versioon.


Kui olete Corona installinud, peate selle aktiveerima. See on ühekordne protsess, mis on tasuta. Käivitage Corona Simulator ja nõustuge litsentsiga. Sisestage e-posti aadress ja parool, mida kasutasite allalaadimiseks, ja klõpsake nuppu Logi sisse.

Projekti käivitamine

Klõpsake Corona Simulatoris nupul „Uus projekt”. Sisestage rakenduse nimi väljale „Rakenduse nimi:” ja jätke ülejäänud seaded vaikeseadetele. Klõpsake „OK“.

Nüüd kuvatakse kolm akent. Esimesed kaks on Corona Simulator ja Corona Simular Output. Corona avab ka failihalduri akna, kus kuvatakse teie projekti failid.

Enamik projekti kataloogis sisalduvaid faile (neist umbes 23) on rakenduse ikooni jaoks! Praegu on meie jaoks kõige olulisem fail main.lua, kuna siin kirjutame oma rakenduse koodi.

Lua sissejuhatus

Enne kui hakkame koodi kirjutama, peame tegema visuaalse peatuse Lua linnas. Lua tõlk (pidage meeles, et see on skriptikeel, mitte kompileeritud keel) on saadaval Windowsi, OS X ja Linuxi jaoks. Kuid see on sisseehitatud Coronasse, nii et praegu ei pea te midagi täiendavat installima. Lihtsaim viis Luaga mängimiseks on kasutada veebis elavat demo.

Veebis leiate palju häid Lua kohta käitavaid õpetusi ja tasub tutvuda Lua teatmikuga, programmeerimisega Lua's, The.Lua.Tutorial ja The Tutorials Point Lua juhendajaga.

Siin on väike Lua-programm, mis näitab teile mõnda Lua põhijoont:

kohalik funktsioon doubleIt (x) tagastab x * 2 lõpu i = 1,10,1 korral x = doubleIt (i), kui (x == 10), siis prindi ("kümme") muidu prindi (doubleIt (i)) lõpp

Ülaltoodud kood näitab kolme olulist Lua konstrukti: funktsioonid, silmused ja if-avaldused. Funktsioon doubleIt () on väga lihtne, see lihtsalt kahekordistab läbitud parameetri x.

Peamine kood on a jaoks silmus 1 kuni 10. See kutsub doubleIt () iga iteratsiooni kohta. Kui tagastatav väärtus on 10 (st i on 5), siis prinditakse kood välja kümme, vastasel juhul prinditakse lihtsalt välja tulemus doubleIt ().

Kui teil on kodeerimise kogemust, peaks näidiskood olema piisavalt lihtne järgida. Kui soovite õppida mõnda põhilist programmeerimist, siis soovitan teil oma oskuste lihvimiseks kasutada mõnda ülaltoodud ressurssi.

Mängu kirjutamine

Põhiprogrammide kirjutamine Coronas on lihtne. Peate muretsema ainult ühe faili pärast, main.lua, ja las Corona teeb kõik rasked tõstmised. Mäng, millest kirjutame, on lihtne “koputamise” mäng. Ekraanil ebaõnnestub õhupall või pomm. Kui mängija koputab balloonile, mille peale nad punkti saavad, koputavad pommi, jagatakse skoor 2-ga karistusena. Redigeeritava koodi kirjutamiseks main.lua. Seda saate teha mis tahes tekstiredaktoris.

Corona SDK-l on sisseehitatud 2D-füüsika mootor, mis teeb mängude ehitamise väga lihtsaks. Mängu kirjutamise esimene samm on füüsikamootori lähtestamine:

kohalik füüsika = vaja ("füüsika") füüsika.start ()

Kood on üsna iseenesestmõistetav. Mooduli füüsika laaditakse ja lähtestatakse, see omistatakse muutujale Füüsika. Mootori aktiveerimiseksfüüsika.start () kutsutakse.

Järgmisena loome mõned kasulikud muutujad, mis on kasulikud mitte ainult selle lihtsa mängu, vaid ka keerukamate mängude jaoks. poolW ja poolH hoidke väärtusi poole ekraanilaiuse ja poole ekraani kõrguse kohta:

poolW = kuva.sisu laius * 0,5 poolH = kuva.suhtKõrgus * 0,5

väljapanek objekt on eelnevalt määratletud objekt, mille Corona teeb globaalselt kättesaadavaks.

Nüüd on esimene samm, mis paneb ekraanil midagi juhtuma:

kohalik bkg = display.newImage ("night_sky.png", poolW, poolH)

Nagu ka omadused nagu sisuKõrgus ja sisu laius, väljapanek objektil on ka palju kasulikke funktsioone. newImage () funktsioon loeb pildifaili (antud juhul .png) ja kuvab selle ekraanil. Kuvariobjektid renderdatakse kihtidena, nii et kuna see on esimene pilt, mille ekraanile paneme, on see alati taust (välja arvatud juhul, kui kood seda selgesõnaliselt midagi muudab). Parameetrid poolW ja poolH öelge Coronal, et asetage pilt keskele.

Sel hetkel saate koodi emulaatoris käivitada ja näha taustpilti. Kui salvestate faili, märkab emulaator, et fail on muutunud, ja pakub võimaluse uuesti käivitada. Kui seda ei juhtu, kasutage Fail-> Taaskäivita.

Kuna kasutaja saab õhupallide koputamise eest punkte, tuleb lähtestada hindemuutuja ja kuvada tulemus ekraanil:

skoor = 0 scoreText = display.newText (skoor, poolW, 10)

Hindeid hoitakse kujutlusvõimelises nimetuses muutuja skoor,ja tulemusTekst on objekt, mis kuvab punkti. Nagu newImage (), newText () pange ekraanile midagi, antud juhul teksti. Alates tulemusTekst on globaalne muutuja, siis saame teksti igal ajal muuta. Kuid me jõuame selleni varsti.

Saate emulaatori taaskäivitada ja ekraani ülaservas näete tulemust 0.

Vasakul: ainult taust. Paremal: taust ja tulemus.

Nüüd tuleb midagi pisut keerulisemat, kuid ärge muretsege, ma seletan seda ridahaaval:

kohalik funktsioon balloonTouched (sündmus) if (event.phase == "algas"), siis Runtime: removeEventListener ("enterFrame", event.self) event.target:removeSelf () score = score + 1 scoreText.text = score end end

Ülaltoodud kood määratleb funktsiooni, mida nimetatakse balloonTouched () mida kutsutakse iga kord, kui õhupalli koputatakse. Me pole veel öelnud, et Corona helistaks sellele funktsioonile iga kord, kui õhupalli koputatakse, see tuleb hiljem, kuid kui me seda teeme, siis see funktsioon helistatakse.

Puudutamise või puudutamise sündmustel on mitu etappi, millest paljud lohistamise toetamiseks. Kasutaja paneb sõrme objektile, see on algusfaas. Kui nad libistavad sõrme ükskõik millises suunas, on see "liigutatud" faas. Kui kasutaja tõstab sõrme ekraanilt, on see "lõppenud" faas.

Esimene rida balloonTouched () kontrollib, et oleme algusjärgus. Soovime õhupalli eemaldada ja tulemust suurendada nii kiiresti kui võimalik. Kui funktsiooni kutsutakse uuesti muudeks faasideks, näiteks “lõppenud”, siis funktsioon ei tee midagi.

Seeskui avaldus on neli koodirida. Vaatame kahte viimast esimest, kuna need on lihtsamad.skoor = skoor + 1 lihtsalt suurendab skoori ühe võrra jascoreText.text = skoor muudab ekraanil oleva hinde teksti uue hinde kajastamiseks. Pidage meeles, kuidas ma seda ütlesintulemusTekst oli ülemaailmne ja sellele võis juurde pääseda kõikjal, seda me siin ka teeme.

Nüüd kahe esimese rea kohta. Kui õhupall või pomm kukub ekraani põhja, on see rakenduse mälus endiselt olemas, lihtsalt ei näe te seda. Mängu edenedes suureneb nende ekraaniväliste objektide arv pidevalt. Seetõttu peab meil olema mehhanism, mis kustutab objektid, kui need on silma alt ära. Me teeme seda funktsioonis nimegavälisekraan, millest me pole veel kirjutanud. Seda funktsiooni kutsutakse mängu ajal üks kord kaadri kohta. Kui õhupalli on koputatud, peame selle kustutama ja eemaldama kõne, mis kontrollib, kas õhupall on ekraanilt väljas.

Joonevent.target:removeSelf () kustutab õhupalli. Puudutussündmuse korral on kuulaja funktsiooni üks parameetritsündmus parameeter. See kirjeldab sündmuse funktsiooni ja seda, millist tüüpi sündmus see on, ntsündmus.faas. Samuti ütleb see meile, millist õhupalli koputati,sündmus.siht. eemalda ise () funktsioon teeb seda, mida ta ütleb, see kustutab objekti (antud juhul õhupalli).

Sellele eelnev rida eemaldab kuulaja “enterframe”, mis on funktsioon, mida nimetatakse igaks kaadriks, et näha, kas õhupall on ekraani põhjast maha kukkunud. Vaatleme seda üksikasjalikumalt, kui tuleme kirjutamavälisekraan kuulaja funktsioon.

Nii et kokkuvõtteks.balloonTouched ()kontrollib, kas see on puutejada algus. Seejärel eemaldab see "sisendraami" kuulaja, mida nimetatakse igaks kaadriks, et näha, kas õhupall on ekraani põhjast maha kukkunud. Seejärel kustutab see õhupalli, suurendab skoori ja kuvab uue skoori.

See oli õhupallide jaoks, nüüd vajame pommide jaoks midagi sarnast:

kohalik funktsioonpommTouched (sündmus), kui (event.phase == "algas"), siis Runtime: removeEventListener ("enterFrame", event.self) event.target:removeSelf () score = matemaatikapõrand (hinne * 0,5) scoreText.text = tulemus lõpp lõpp

Nagu näete, on kood väga sarnane selle erandiga, et skoori suurendamise asemel korrutatakse skoor 0,5-ga (st jagatakse 2-ga). math.põrand () funktsioon ümardab skoori allapoole lähima täisarvuni. Nii et kui mängija skoor on 3 ja ta pommib, siis on uus skoor 1 ja mitte 1,5.

Mainisin väline ekraan () funktsioon varem. Seda funktsiooni kutsutakse igaks kaadriks, et kontrollida, kas objekt on ekraanilt väljas. Siin on kood:

kohaliku funktsiooni väline ekraan (iseenesest, sündmus), kui (self.y == null), siis naaske lõpp, kui (self.y> display.contentHeight + 50) then Runtime: removeEventListener ("enterFrame", self) self: removeSelf () end end

Arvutamisel on tegemist olukorraga, mida nimetatakse võistlusolukorraks. Siin juhtuvad kaks asja, kuid üks võib juhtuda kõigepealt või mõnikord teine ​​juhtuda kõigepealt. See on võistlus. Mõned võistlustingimused on nähtamatud, kuna üks asi näib alati juhtuvat kõigepealt, kuid need võivad põhjustada huvitavaid vigu, sest ühel päeval, sobivates tingimustes, juhtub kõigepealt teine ​​asi ja siis süsteem puruneb!

Selles lihtsas mängus on olemas võistlustingimused, kuna kaks asja võivad juhtuda üksteisele väga lähedal: koputatakse õhupalli ja väline ekraan () , et vaadata, kas õhupall on ekraanilt maha läinud. Selle tulemuseks on, et kutsutakse õhupalli kustutamise kood ja seejärel väline ekraan () funktsiooni kutsutakse (mis juhtub nagu 30 korda sekundis). Sellest veidrast sündmuste jadast mööda pääseb väline ekraan () funktsioon peab kontrollima, kas y objekti väärtus on null (null) või mitte. Kui on null siis see tähendab, et objekt on juba kustutatud, nii et liikuge edasi, need pole just need droidid, mida otsime.

Kui objekt on endiselt mängitud, siis kontrollige selle asukohta, kui see on ekraanilt 50 piksli võrra maha läinud, siis kustutage see ja eemaldage kuulaja nii, et väline ekraan () selle objekti jaoks enam funktsiooni ei kutsuta. Kood selle tagamiseksväline ekraan () nimetatakse igaks kaadriks järgmises koodiosas.

Selle mängu eeldus on see, et uued õhupallid või pommid jätkavad ekraani langemist. Seetõttu vajame funktsiooni, mis loob kas uue õhupalli või uue pommi:

kohalik funktsioon addNewBalloonOrBomb () lokaalne startX = math.random (display.contentWidth * 0,1, display.contentWidth * 0,9) if (math.random (1,5) == 1) then - BOMB! kohalik pomm = kuva.newImage ("bomb.png", startX, -300) füüsika.addBody (pomm) bomb.enterFrame = väline ekraan Runtime: addEventListener ("enterFrame", pomm) pomm: addEventListener ("touch", bombTouched) else - Ballooni lokaalne õhupall = kuva.uuu pilt ("red_balloon.png", startX, -300) füüsika.addBody (õhupall) balloon.enterFrame = välisekraani käitusaeg: addEventListener ("enterFrame", õhupall) õhupall: addEventListener ("puudutage", balloonTouched) otsa lõpp

Funktsiooni esimene rida otsustab, kuhu õhupall langeb x lennuk. Kui õhupall või pomm alati keskele kukub, pole see eriti huvitav! NiistartX on juhuslik arv vahemikus 10 protsenti kuni 90 protsenti ekraani laiusest.

Järgmisena valitakse juhuslik arv vahemikus 1 kuni 5.Kui number on 1, siis pomm langeb. Kui see on 2, 3, 4 või 5, siis kukub õhupall. See tähendab, et pommid kukub umbes 20 protsenti ajast.

Pommi ja õhupalli kood on üsna sarnased. Kõigepealt kuvatakse pilt (kas pomm või õhupall), kasutadesnewImage(). Selle x seisukoht on sellinestartX samal ajal kui see y positsioon seatakse väärtusele -300, st ekraani ülaserva. Selle põhjuseks on asjaolu, et tahame, et objekt kukuks ekraaniväliselt väljapoole nähtavale alale ja seejärel alt üles. Kuna me kasutame 2D füüsika mootorit, on hea anda objektile natuke algset kukkumiskaugust, et see saaks natuke kiirust juurde.

Kõnefüüsika.addBody () võtab pildi, mille laadis newImage () ja muudab selle füüsikamootori objektiks. See on väga võimas. Mis tahes pildifaili saab muuta kehaks, mis reageerib raskusele ja kokkupõrgetele lihtsalt helistadesfüüsika.addBody ().

Pommi või õhupalli koodi kolm viimast rida seadsid kuulajad üles. SeadistamineenterFrame vara ütleb Coronale, milline funktsioon helistab igale kaadrile ja kõneleKestus: addEventListener () seab selle üles. Viimane üleskutseõhupall: addEventListener () ütleb Coronale, millist funktsiooni helistada pommi või õhupalli puudutamisel.

Ja nüüd on mäng peaaegu valmis. Me vajame lihtsalt veel kahte koodirida:

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

Esimene rida paneb esimese pommi või õhupalli kukkuma, helistades selgesõnaliseltaddNewBalloonOrBomb (). Teine rida seab taimeri, mis helistabaddNewBalloonOrBomb () iga poole sekundi tagant (500 millisekundit). See tähendab, et uus õhupall või pomm kukub iga poole sekundi tagant.

Nüüd saate mängu emulaatoris käivitada.

Siin on main.lua täielik loetelu, mängu täielik projekti lähtekood on siin GitHubis.

-------------------------------------------------- --------------------------------------- - - langev õhupall ja pommimäng - Kirjutas Gary Sims - ------------------------------------------- ---------------------------------------------- - käivitage füüsika mootor kohalik füüsika = nõuda ("füüsika") füüsika.start () - ekraani laiuse ja kõrguse arvutamiseks poolW = kuvari.sisalduslaius * 0,5 poolH = kuvamine.sisalduskõrgus * 0,5 - tausta kohaliku tausta määramine bkg = display.newImage ("night_sky.png", halfW, halfH) - Score score = 0 scoreText = display.newText (score, halfW, 10) - Helistatakse, kui mängija koputab õhupallile - Suurendage tulemust 1 kohaliku funktsiooni balloonTouched ( sündmus) if (event.phase == "algas"), siis Runtime: removeEventListener ("enterFrame", event.self) event.target:removeSelf () score = score + 1 scoreText.text = score end end - helistatakse, kui pomm lööb mängija poolt - pool skoorist kui kohalik karistusfunktsioon pommTouched (sündmus), kui (event.phase == "algas"), siis Runtime: removeEventListener ("enterFrame", event.self) event.target:removeSelf () score = math.floor (score * 0,5) scoreText.text = score end end - kustutage objektid, mis on langenud ekraani allosas kohalik funktsioon väljaspool ekraani (ise, sündmus), kui (self.y == null), siis naaske lõpp, kui (self.y> display.contentHeight + 50), siis Runtime: removeEventListener ("enterFrame", self) self: removeSelf () end end - lisage uus langev õhupall või pommi kohalik funktsioon addNewBalloonOrBomb () - reditball_png ja bomb.png leiate GitHubi repo lokaalsest startX = math.random (display.contentWidth * 0,1, display.contentWidth * 0,9) if (matemaatika.juhus (1,5) == 1), siis - POMM! kohalik pomm = kuva.newImage ("bomb.png", startX, -300) füüsika.addBody (pomm) bomb.enterFrame = väline ekraan Runtime: addEventListener ("enterFrame", pomm) pomm: addEventListener ("touch", bombTouched) else - Ballooni lokaalne õhupall = kuva.uuu pilt ("red_balloon.png", startX, -300) füüsika.addBody (õhupall) balloon.enterFrame = välisekraani käitusaeg: addEventListener ("enterFrame", õhupall) õhupall: addEventListener ("puudutage", balloonTouched) end end - lisage uus õhupalli või pomm nüüd addNewBalloonOrBomb () - lisage uue õhupalli või pommi lisamine iga 0,5 sekundi järel taimeriga.performWithDelay (500, addNewBalloonOrBomb, 0)

Järgmised sammud

Järgmine samm on mängu mängimine päris Android-seadmes. .Apk-faili loomiseks klõpsake File-> Build for Android… ja täitke väljad. Tulemuseks on .apk-fail, mille saate seadmesse kopeerida ja seejärel installida. Peate tagama, et olete oma seadme konfigureerinud lubama rakenduse installimist tundmatutest allikatest. Amazonil on selle kohta häid dokumente, kuna selle peate seadma ka Amazon Appstore'i installimiseks. Coronal on ka juhend, kuidas oma rakendusele Androidi seadmetes alla kirjutada, seda ehitada ja testida.

Kui mäng on teie seadmesse edukalt installitud, on mängu parandamine järgmine. Näiteks miks mitte proovida lisada „pop” või „paugu” kõla, mida õhupalli või pommi koputatakse. Coronal on selleks API:media.playEventSound ().

Või miks mitte proovida lisada kolmandat tüüpi objekte, näiteks öelda ülivõimendus, mis kahekordistab praeguse partituuri, või kuidas oleks mõne taustamuusikaga?

Pakkima

Coronaga mängude kirjutamine on üsna sirgjooneline, sest SDK tegeleb selliste asjadega nagu OpenGL ja see sisaldab sisseehitatud 2D füüsika mootorit. Ka Lua on lihtne õppida ja see ei tohiks olla raske kellelegi, kellel on minimaalne programmeerimiskogemus. Coronalabsi veebisaidil on palju dokumente, sealhulgas palju juhendeid ja õpetusi.

Vähem kui 100 koodirida korral on meil toimiv mäng. OK, see ei võida auhindu, kuid see näitab Corona SDK tugevust ja paindlikkust.

PC jaok on välja antud populaare Androidi emulaatori Bluetack uuim verioon.Bluetack 4 annab eelneva veriooni ja Androidi lipulaevade uhte ekponentiaale hüppe jõudlue.Vanade ülearvu...

Bluetack on teatanud arendajatele mõeldud DK-t Bluetack Inide, mi võimaldab mobiilimänge PC- kiireti avaldada.Uu DK võimaldab mobiiliarendajatel avaldada oma pealkirjad teami ja mu...

Populaarne