Ensimmäisen Android-pelisi kirjoittaminen Corona SDK: lla

Kirjoittaja: Randy Alexander
Luomispäivä: 1 Huhtikuu 2021
Päivityspäivä: 26 Kesäkuu 2024
Anonim
Ensimmäisen Android-pelisi kirjoittaminen Corona SDK: lla - Sovellukset
Ensimmäisen Android-pelisi kirjoittaminen Corona SDK: lla - Sovellukset

Sisältö


Google Play Kaupan suosituin luokka on aina ollut Pelit. Vaikka me kaikki luultavasti käytämme tärkeimpiä tuottavuussovelluksia, kuten selainta, sähköpostiohjelmaa ja pikaviestisovellusta, pelaaminen on edelleen tärkeä osa mobiilikokemusta. Joten ei ole yllättävää, että monet ihmiset, jotka haluavat oppia kehittämään Androidia, haluavat aloittaa pelin avulla. Olkaamme myös rehellisiä, pelin kirjoittaminen on kokonaan paljon hauskempaa kuin tuottavuussovelluksen kehittäminen!

Androidin virallinen kieli on Java ja virallinen kehitysympäristö on Android Studio. Jos haluat tutkia Java-ohjelmaa, ehdotan Java-perusteiden opetusohjelmaamme, ja jos haluat oppia kuinka kirjoittaa sovelluksen Android Studio -sovelluksen avulla, suosittelen, että tutustu ensimmäisen Android-sovelluksesi kirjoittamisohjeisiin. Java ja Android studio eivät kuitenkaan ole ainoat tavat kehittää Androidille. Löydät yleiskatsauksen käytettävissä olevista kielistä ja SDK: ista oppaastamme: Haluan kehittää Android-sovelluksia - mitä kieliä minun pitäisi oppia?


Yksi ohjelmointikielten oppaassa mainituista SDK: ista on Corona, kolmannen osapuolen SDK, joka on suunniteltu ensisijaisesti pelien kirjoittamiseen. Javan sijasta Corona käyttää Luaa, nopeaa skriptikieltä, joka on helppo oppia, mutta tehokas. Corona ei kuitenkaan ole ainoa mobiilipelien SDK, joka käyttää Luaa. Muita tunnettuja esimerkkejä ovat Cocos2d-X, Marmalade ja Gideros.

lataa ja asenna

Aloitaksesi Coronan sinun täytyy ladata ja asentaa SDK. Mene Coronan verkkosivustolle ja napsauta latauspainiketta. Sinun on luotava tili (joka on ilmainen) ennen kuin voit ladata paketin. Jos haluat rakentaa todellisen .apk-tiedoston sen sijaan, että vain ajaisit ohjelmaa emulaattorissa, sinun on asennettava Java 7, mutta sinun ei tarvitse asentaa Android SDK: ta. Asentaaksesi Java 7 -kehityspaketin siirry Oraclen verkkosivustolle, etsi kohta ”Java SE Development Kit 7u79” ja lataa versio tietokoneellesi.


Kun olet asentanut Coronan, sinun on aktivoitava se. Tämä on kertaluonteinen prosessi, joka on ilmainen. Käynnistä Corona Simulator ja hyväksy käyttöoikeus. Kirjoita sähköpostiosoite ja salasana, jota käytit lataamiseen, ja napsauta Kirjaudu.

Projektin aloittaminen

Napsauta Corona Simulator -sovelluksen sisällä ”Uusi projekti”. Kirjoita sovelluksellesi nimi sovelluksen nimi: -kenttään ja jätä loput asetukset oletusasetuksiin. Napsauta “OK”.

Kolme ikkunaa ilmestyy nyt. Kaksi ensimmäistä ovat Corona Simulator ja Corona Simular Output. Corona avaa myös tiedostojen tutkimusikkunan, joka näyttää projektisi tiedostot.

Suurin osa projektihakemiston tiedostoista (noin 23 niistä) on sovelluskuvaketta varten! Tärkein tiedosto meille tällä hetkellä on main.lua, koska tässä kirjoitamme sovelluksellemme koodin.

Johdatus Luaan

Ennen kuin aloitamme koodin kirjoittamisen, meidän on tehtävä pilli-iltakierros Luassa. Lua-tulkki (muista, että tämä on kirjoituskieli, ei käännetty kieli) on saatavana Windowsille, OS X: lle ja Linuxille. Se on kuitenkin sisäänrakennettu Coronaan, joten sinun ei tällä hetkellä tarvitse asentaa mitään ylimääräistä. Helpoin tapa pelata Luan kanssa on käyttää online-livedemoa.

Löydät verkosta paljon hyviä Lua-opetusohjelmia, ja sinun kannattaa tutustua Lua-ohjekirjaan, Lua-ohjelmointiin, The.Lua.Tutorialiin ja Tutorials Point Lua -opetukseen.

Tässä on pieni Lua-ohjelma, joka näyttää joitain Lua: n tärkeimmistä ominaisuuksista:

paikallinen toiminto doubleIt (x) palauttaa x * 2 lopun i = 1,10,1 tehdä x = doubleIt (i) jos (x == 10) sitten tulosta ("kymmenen") muuten tulosta (doubleIt (i)) pääty

Yllä oleva koodi näyttää kolme tärkeää Lua-konstruktiota: funktiot, silmukat ja if-lauseet. Toiminto doubleIt () on hyvin yksinkertainen, se vain kaksinkertaistaa läpäissyt parametrin x.

Pääkoodi on a varten silmukka 1-10. Se soittaa doubleIt () jokaisesta iteraatiosta. Jos palautusarvo on 10 (ts. Milloin minä on 5), sitten koodi tulostaa "kymmenen", muuten se tulostaa vain tuloksen doubleIt ().

Jos sinulla on koodauskokemusta, esimerkkikoodin on oltava riittävän helppo seurata. Jos haluat oppia joitain ohjelmoinnin perusteita, suosittelen, että käytät joitain yllä linkitettyjä resursseja parantamaan taitojasi.

Pelin kirjoittaminen

Perusohjelmien kirjoittaminen Coronassa on yksinkertaista. Tarvitset vain yhden tiedoston, main.lua, ja anna Coronan tehdä kaiken raskaan nostamisen. Peli, jota aiomme kirjoittaa, on yksinkertainen “tap-peli”. Ilmapallo tai pommi epäonnistuu näytöllä. Jos pelaaja napauttaa palloa, jonka he antavat pisteen, he napsauttavat pommia, pisteet jaetaan 2: lla rangaistuksena. Muokataksesi koodin kirjoittamiseen main.lua. Voit tehdä tämän missä tahansa tekstieditorissa.

Corona SDK: ssä on sisäänrakennettu 2D-fysiikan moottori, joka tekee pelien rakentamisesta erittäin helppoa. Ensimmäinen askel pelin kirjoittamisessa on fysiikan moottorin alustaminen:

paikallinen fysiikka = vaadi ("fysiikka") physics.start ()

Koodi on melko itsestään selvä. Moduulin fysiikka ladataan ja alustetaan, se osoitetaan muuttujalle fysiikka. Moottorin käyttöönottophysics.start () kutsutaan.

Seuraavaksi luomme hyödyllisiä muuttujia, jotka ovat hyödyllisiä tämän yksinkertaisen pelin lisäksi myös monimutkaisempiin peleihin. halfW ja halfH Pidä arvot puolet näytön leveydestä ja puolet näytön korkeudesta:

puoliW = näyttö.sisältöleveys * 0.5 puoliH = näyttö.sisältökorkeus * 0.5

näyttö objekti on ennalta määritetty objekti, jonka Corona asettaa maailmanlaajuisesti saataville.

Nyt on ensimmäinen askel, joka todella saa jotain tapahtumaan näytöllä:

paikallinen bkg = näyttö.newImage ("night_sky.png", puoliW, puoliH)

Sekä ominaisuudet kuten contentHeight ja contentWidth, näyttö Kohteessa on myös paljon hyödyllisiä toimintoja. uusi kuva() -toiminto lukee kuvatiedoston (tässä tapauksessa .png) ja näyttää sen näytöllä. Näyttöobjektit renderoidaan kerroksittain, joten koska tämä on ensimmäinen kuva, jonka laitamme näytölle, se on aina tausta (ellei koodi nimenomaisesti tee jotain sen muuttamiseksi). Parametrit halfW ja halfH Pyydä Coronaa asettamaan kuva keskelle.

Tässä vaiheessa voit suorittaa koodin emulaattorissa ja nähdä taustakuvan. Jos tallennat tiedoston, emulaattori huomaa, että tiedosto on muuttunut, ja tarjoaa uudelleenkäynnistyksen. Jos näin ei tapahdu, käytä Tiedosto-> Käynnistä uudelleen.

Koska käyttäjä saa pisteitä ilmapallojen napauttamisesta, meidän on alustettava pisteet-muuttuja ja näytettävä pisteet ruudulla:

score = 0 scoreText = display.newText (score, halfW, 10)

Pisteet pidetään mielikuvituksellisesti nimettynä muuttujana pisteet,ja scoreText on esine, joka näyttää pistemäärän. Kuten uusi kuva(), newText () laita jotain näytölle, tässä tapauksessa teksti. Siitä asti kun scoreText on globaali muuttuja, niin voimme muuttaa tekstiä milloin tahansa. Mutta pääsemme siihen pian.

Voit käynnistää emulaattorin uudelleen ja nähdä pisteet 0 näytön yläreunassa.

Vasen: Vain tausta. Oikealla: Tausta ja pistemäärä.

Nyt on jotain hieman hankalampaa, mutta älä huolestu, selitän sen riviltä:

paikallinen toiminto balloonTouched (tapahtuma), jos (event.phase == "alkoi") sitten Runtime: removeEventListener ("enterFrame", event.self) event.target:removeSelf () score = score + 1 scoreText.text = score end end

Yllä oleva koodi määrittelee funktion, jota kutsutaan balloonTouched () jota kutsutaan joka kerta, kun pallo napautetaan. Emme ole vielä käskeneet Coronaa kutsumaan tätä toimintoa joka kerta, kun palloa napautetaan, se tulee myöhemmin, mutta kun teemme tämän, se toiminto, joka soitetaan.

Napauttamis- tai kosketustapahtumilla on useita vaiheita, joista monet tukevat vetämistä. Käyttäjä asettaa sormensa esineelle, tämä on “aloitettu” vaihe. Jos ne liu'uttavat sormeaan mihin tahansa suuntaan, se on ”siirretty” vaihe. Kun käyttäjä nostaa sormensa näytöltä, se on "päättynyt" vaihe.

Ensimmäinen rivi balloonTouched () tarkistaa, että olemme ”aloitusvaiheessa”. Haluamme poistaa ilmapallo ja kasvattaa pisteet niin pian kuin mahdollista. Jos toiminto kutsutaan uudelleen muille vaiheille, kuten “päättyi”, toiminto ei tee mitään.

Sisälläjos lauseke on neljä koodiriviä. Tarkastellaan kahta viimeistä ensimmäistä, koska ne ovat yksinkertaisempia.pisteet = pisteet + 1 lisää vain pistettä yhdellä jascoreText.text = pistemäärä muuttaa näytöllä näkyvää pisteet-tekstiä uuden pisteet mukaan. Muista kuinka sanoin senscoreText oli maailmanlaajuinen ja siihen päästiin missä tahansa, juuri sen teemme täällä.

Nyt kahdesta ensimmäisestä rivistä. Kun ilmapallo tai pommi putoaa näytön alaosasta, sitä on edelleen sovelluksen muistissa, et vain voi nähdä sitä. Pelin edetessä näiden näytön ulkopuolella olevien kohteiden määrä kasvaa tasaisesti. Siksi meillä on oltava mekanismi, joka poistaa esineitä heti, kun ne ovat poissa näkyvistä. Teemme sen toiminnassa, jota kutsutaanoffscreen, jota emme ole vielä kirjoittaneet. Tätä toimintoa kutsutaan kerran kehyksessä pelin aikana. Kun ilmapallo on napsautettu, meidän on poistettava se ja poistettava puhelu, joka tarkistaa, onko ilmapallo mennyt näytölle.

Linjaevent.target:removeSelf () poistaa ilmapallo. Kun kosketustapahtuma tapahtuu, yksi kuuntelutoiminnon parametreista ontapahtuma parametri. Se kertoo toiminnon tapahtumasta ja millainen tapahtuma se on, esim.event.phase. Se kertoo myös, mikä ilmapallo napsautettiin,event.target. removeSelf () funktio tekee mitä sanoo tekevänsä, se poistaa objektin (tässä tapauksessa ilmapallo).

Edellä oleva rivi poistaa “enterframe” -kuuntelijan, joka on toiminto, jota kutsutaan jokaisiksi kehyksiksi, jotta voidaan nähdä, onko ilmapallo pudonnut näytön pohjasta. Katsomme tätä yksityiskohtaisemmin, kun tulemme kirjoittamaanoffscreen kuuntelutoiminto.

Joten kertoa.balloonTouched ()tarkistaa, että tämä on kosketusjakson alku. Sitten se poistaa ”enterframe” -kuuntelijan, joka on toiminto, jota kutsutaan jokaiseksi kehykseksi, jotta voidaan nähdä, onko ilmapallo pudonnut näytön pohjasta. Sitten se poistaa ilmapallo, lisää pisteet ja näyttää uuden pistemäärän.

Se koski ilmapalloja, nyt tarvitsemme jotain vastaavaa pommeihin:

paikallinen toimintopommiOhjattu (tapahtuma), jos (tapahtuma.faasi == "alkoi"), sitten kesto: poistaEventListener ("enterFrame", tapahtuma. = pisteet loppupään

Kuten näette, koodi on hyvin samankaltainen sillä poikkeuksella, että pistemäärän lisäämisen sijaan pistemäärä kerrotaan 0,5: llä (ts. Jaettuna 2: lla). Math.floor () funktio pyöristää pisteet lähimpään kokonaislukuun. Joten jos pelaajalla olisi pistemäärä 3 ja hän napsautti pommia, uusi pistemäärä olisi 1 eikä 1,5.

Mainitsin offscreen () toimivat aiemmin. Tätä toimintoa kutsutaan joka kehykseksi sen tarkistamiseksi, onko objekti poistunut näytöstä. Tässä on koodi:

paikallinen toiminto näytön ulkopuolella (itse, tapahtuma), jos (itse.y == nolla), sitten palata loppua, jos (itse.y> näyttö.sisältökorkeus + 50) sitten Runtime: removeEventListener ("enterFrame", itse) self: removeSelf () end end

Laskennassa on tilanne, jota kutsutaan kilpailuolosuhteiksi. Tässä tapahtuu kaksi asiaa, mutta yksi voi tapahtua ensin, tai joskus toinen tapahtuu ensin. Se on kilpailu. Jotkut kilpailutilanteet eivät ole näkyviä, koska yksi asia näyttää aina tapahtuvan ensin, mutta ne voivat aiheuttaa mielenkiintoisia virheitä sinä päivänä, oikeissa olosuhteissa, toinen asia tapahtuu ensin ja sitten järjestelmä rikkoutuu!

Tässä yksinkertaisessa pelissä on kilpailuolosuhteet, koska kaksi asiaa voi tapahtua hyvin lähellä toisiaan: pallo koputetaan ja offscreen () toimintoa kutsutaan, onko ilmapallo poistunut näytöltä. Seurauksena on, että ilmapallon poistamiseen käytettävä koodi voidaan kutsua ja sitten offscreen () funktiota kutsutaan (joka tapahtuu kuten 30 kertaa sekunnissa). Kiertääkseen tätä outoa tapahtumakokonaisuutta offscreen () toiminnon on tarkistettava, onko y esineen arvo on nolla (nolla) tai ei. Jos se on nolla sitten se tarkoittaa, että esine on jo poistettu, joten siirry eteenpäin, nämä eivät ole droideja, joita etsimme.

Jos esine on edelleen pelissä, tarkista sen sijainti, jos se on mennyt 50 pikselin etäisyydelle näytöstä, poista se ja poista kuuntelija siten, että offscreen () tätä objektia ei enää kutsuta uudelleen. Koodi varmistaaksesi senoffscreen () kutsutaan jokainen kehys on osa seuraavaa koodiosaa.

Pelin lähtökohtana on, että uudet ilmapallot tai pommit pudottavat näyttöä edelleen. Siksi tarvitsemme toiminnon, joka luo joko uuden ilmapallo tai uuden pommin:

paikallinen toiminto addNewBalloonOrBomb () paikallinen startX = math.random (näyttö.sisältöleveys * 0,1, näyttö.sisältöleveys * 0.9) jos (math.johtoehto (1,5) == 1) sitten - Pommi! paikallinen pommi = näyttö.newImage ("bomb.png", startX, -300) physics.addBody (pommi) bomb.enterFrame = offscreen Runtime: addEventListener ("enterFrame", pommi) pommi: 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", "touch", balloonTouched) loppupää

Toiminnon ensimmäinen rivi päättää, mistä pallo putoaa x tasossa. Jos ilmapallo tai pommi putosi aina keskelle, se ei olisi kovin mielenkiintoista! Niinstartx on satunnaisluku välillä 10 prosenttia - 90 prosenttia näytön leveydestä.

Seuraavaksi satunnaisluku valitaan välillä 1-5.Jos numero on 1, pommi pudotetaan. Jos se on 2, 3, 4 tai 5, pallo putoaa. Tämä tarkoittaa, että pommeja pudotetaan noin 20 prosenttia ajasta.

Pommi ja ilmapallo koodi ovat melko samankaltaiset. Ensin kuva (joko pommi tai ilmapallo) näytetään painikkeellauusi kuva(). Sen x asema onstartx kun taas sen y asema on asetettu arvoon -300, ts. näytön yläosasta. Syynä tähän on, että haluamme, että esine putoaa näytön alueen ulkopuolelta näkyvälle alueelle ja sitten pohjaan. Koska käytämme 2D-fysiikan moottoria, on hyvä antaa esineelle hiukan alustava etäisyys putoavaksi, jotta se voi saavuttaa jonkin verran nopeutta.

Puheluphysics.addBody () ottaa kuvan, jonka lataa uusi kuva() ja muuttaa siitä fysiikan moottorin esineen. Tämä on erittäin voimakas. Mistä tahansa kuvatiedostosta voidaan tehdä runko, joka reagoi painovoimaan ja törmäyksiin vain soittamallaphysics.addBody ().

Pommin tai ilmapallokoodin kolme viimeistä riviä asettivat kuulijat. AsettaminenenterFrame ominaisuus kertoo Coronalle, mikä toiminto soittaa jokaiselle kehykselle ja puhelulleKesto: addEventListener () asettaa sen. Viimeinen puheluilmapallo: addEventListener () kertoo Coronalle, mikä toiminto soittaa, jos pommia tai ilmapalloa kosketetaan.

Ja nyt peli on melkein valmis. Tarvitsemme vain kaksi muuta koodiriviä:

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

Ensimmäinen rivi saa ensimmäisen pommin tai ilmapallon putoamaan nimenomaan soittamallaaddNewBalloonOrBomb (). Toinen rivi asettaa ajastimen, joka soittaaaddNewBalloonOrBomb () joka puoli sekuntia (500 millisekuntia). Tämä tarkoittaa, että uusi ilmapallo tai pommi putoaa puolen sekunnin välein.

Voit nyt ajaa peliä emulaattorissa.

Tässä on main.lua-sivuston täydellinen luettelo, tämän pelin koko projektin lähdekoodi löytyy täältä GitHubista.

-------------------------------------------------- --------------------------------------- - - putoava ilmapallo ja pommipeli - Kirjoittanut Gary Sims - ------------------------------------------- ---------------------------------------------- - Käynnistä fysiikan moottori paikallinen fysiikka = vaaditaan ("fysiikka") physics.start () - Laske puoli näytön leveyttä ja korkeutta puoliW = näyttö.sisältöleveys * 0,5 puoliH = näyttö.sisältökorkeus * 0,5 - Aseta taustan paikallinen bkg = näyttö.uusiKuva ("night_sky.png", halfW, halfH) - Pistemäärä = 0 scoreText = display.newText (score, halfW, 10) - Soitetaan, kun pelaaja napsauttaa palloa - Lisää pisteet 1 paikallisella toiminnolla balloonTouched ( tapahtuma) if (event.phase == "alkoi") sitten Runtime: removeEventListener ("enterFrame", event.self) event.target:removeSelf () score = score + 1 scoreText.text = score end end - Soitetaan, kun pommi napsauttaa pelaajaa - Puoli pisteet paikallisena rangaistusfunktiona bombTouched (tapahtuma), jos (event.phase == "alkoi") sitten Runtime: removeEventListener ("enterFrame", event.self) event.target:removeSelf () score = math.floor (score * 0.5) scoreText.text = score end end - Poista objektit, jotka ovat pudonneet näytön alareuna paikallinen toiminto näytön ulkopuolella (itse, tapahtuma), jos (itse.y == nolla), sitten palata loppua, jos (itse.y> näyttö.sisältökorkeus + 50) sitten Runtime: removeEventListener ("enterFrame", itse) self: removeSelf () loppupää - Lisää uusi putoava ilmapallo tai pommin paikallinen toiminto addNewBalloonOrBomb () - Löydät red_ballon.png ja bomb.png GitHub repo -paikallisessa startX = math.random (näyttö.sisältöleveys * 0,1, näyttö.sisältöleveys) * 0,9) if (matemaattiset tapaukset (1,5) == 1) sitten - Pommi! paikallinen pommi = näyttö.newImage ("bomb.png", startX, -300) physics.addBody (pommi) bomb.enterFrame = offscreen Runtime: addEventListener ("enterFrame", pommi) pommi: 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", "touch", balloonTouched) end end - Lisää uusi ilmapallo tai pommi nyt addNewBalloonOrBomb () - Lisää uusi ilmapallo tai pommi 0,5 sekunnin välein ajastimeen.performWithDelay (500, addNewBalloonOrBomb, 0)

Seuraavat vaiheet

Seuraava vaihe on pelata peliä oikealla Android-laitteella. Jos haluat luoda .apk-tiedoston, napsauta Tiedosto-> Rakenna Androidille… ja täytä kentät. Tuloksena on .apk-tiedosto, jonka voit kopioida laitteellesi ja asentaa sitten. Sinun on varmistettava, että olet määrittänyt laitteesi sallimaan sovelluksen asentamisen tuntemattomista lähteistä. Amazonilla on hyviä asiakirjoja tästä, koska sinun on myös asetettava tämä asentamaan Amazon Appstore. Coronassa on myös opas sovelluksen allekirjoittamiseen, rakentamiseen ja testaamiseen Android-laitteilla.

Kun peli on asennettu laitteellesi onnistuneesti, seuraava peli on parantaa peliä. Miksi et esimerkiksi yritä lisätä pop- tai bang-ääniä kaikkeen, mitä ilmapalloa tai pommia käytetään. Coronalla on sovellusliittymä tähän:media.playEventSound ().

Tai miksi et yritä lisätä kolmannen tyyppistä objektia, sanotaan superlisä, joka kaksinkertaistaa nykyisen partituurin, tai entä taustamusiikilla?

Paketoida

Pelien kirjoittaminen Coronan kanssa on melko suoraviivaista, koska SDK käsittelee OpenGL: n kaltaisia ​​asioita ja sisältää sisäänrakennetun 2D-fysiikan moottorin. Myös Lua on helppo oppia, eikä sen pitäisi olla vaikea kenellekään, jolla on edes minimaalinen ohjelmointikokemus. Coronalabs-verkkosivustolla on paljon dokumentaatiota, mukaan lukien paljon oppaita ja oppaita.

Alle 100 rivillä koodia meillä on toimiva peli. OK, se ei aio voittaa palkintoja, mutta se osoittaa Corona SDK: n voiman ja joustavuuden.

' Pixel 4 iällön tuo inulle MNML Cae, joka on maailman ohuimman puhelinkotelon päättäjät. äätä 25% Pixel 4 tai Pixel 4 XL -laatikoai alennukoodilla AAP...

e on Amazon Prime Day, ja älypuhelimien faneille on tarjolla hyviä tarjoukia aluta alkaen, kun päivä potkaiee vakavia alennukia joukolle viimeiimpiä amung-älypuhelimia....

Kiehtovia Viestejä