Scrie primul tău joc Android folosind Corona SDK

Autor: Randy Alexander
Data Creației: 1 Aprilie 2021
Data Actualizării: 26 Iunie 2024
Anonim
Top 10 languages 2021. Java 16/17. Processors 3 nm. Netflix triumph [MJC news # 5] NEWS IT FEBRUARY.
Video: Top 10 languages 2021. Java 16/17. Processors 3 nm. Netflix triumph [MJC news # 5] NEWS IT FEBRUARY.

Conţinut


Cea mai populară categorie de pe Google Play Store a fost întotdeauna Jocuri. Deși cu toții utilizăm probabil aplicații cheie de productivitate precum un browser web, un client de e-mail și o aplicație de mesagerie instantanee, jocurile rămân încă o parte importantă a experienței mobile. Așadar, nu este de mirare că multe persoane care doresc să învețe să se dezvolte pentru Android vor să înceapă făcând un joc. De asemenea, să fim sinceri, scrierea unui joc este mult mai distractivă decât să dezvolți o aplicație de productivitate!

Limba oficială a Android este Java, iar mediul oficial de dezvoltare este Android Studio. Dacă doriți să vă uitați în Java, vă sugerez tutorialul nostru de bază Java și dacă doriți să aflați cum să scrieți o aplicație folosind Android Studio, atunci vă sugerez să consultați tutorialul nostru pentru a scrie prima dvs. aplicație Android. Cu toate acestea, Java și studioul Android nu sunt singurele metode de a se dezvolta pentru Android. Puteți găsi o imagine de ansamblu a limbilor și SDK-urilor disponibile în ghidul nostru: Vreau să dezvolt aplicații Android - Ce limbi ar trebui să învăț?


Unul dintre SDK-urile menționate în ghidul limbajelor de programare este Corona, un SDK terț conceput în principal pentru scrierea jocurilor. În locul Java, Corona folosește Lua, un limbaj rapid de script care este ușor de învățat, dar totuși puternic. Cu toate acestea, Corona nu este singurul SDK pentru jocuri mobile care folosește Lua, alte exemple cunoscute includ Cocos2d-X, Marmelada și Gideros.

descarca si instaleaza

Pentru a începe cu Corona, va trebui să descărcați și să instalați SDK. Accesați site-ul web Corona și apăsați butonul de descărcare. Va trebui să creați un cont (care este gratuit) înainte de a putea descărca kitul. Dacă doriți să construiți un fișier .apk, în loc să rulați programul în emulator, va trebui să instalați Java 7, însă nu va trebui să instalați SDK-ul Android. Pentru a instala Java 7 Development Kit accesați site-ul web Oracle, căutați secțiunea numită „Java SE Development Kit 7u79 ″ și descărcați versiunea pentru computer.


După ce ați instalat Corona, trebuie să îl activați. Acesta este un proces unic, care este gratuit. Porniți Corona Simulator și acceptați licența. Introduceți adresa de e-mail și parola pe care le-ați folosit pentru descărcare și faceți clic pe Logare.

Începerea proiectului

Din interiorul Corona Simulator faceți clic pe „Proiect nou”. Introduceți un nume pentru aplicația dvs. în câmpul „Nume aplicație:” și lăsați restul setărilor la valorile lor implicite. Faceți clic pe „OK”.

Vor apărea acum trei ferestre. Primele două sunt Corona Simulator și Corona Simular Output. Corona va deschide, de asemenea, o fereastră de explorator de fișiere care arată fișierele pentru proiectul tău.

Majoritatea fișierelor (aproximativ 23 dintre ele) din directorul proiectului sunt pentru pictograma aplicației! Cel mai important fișier pentru noi în acest moment este main.lua, deoarece aici vom scrie codul aplicației noastre.

Introducere în Lua

Înainte de a intra în scrierea codului, trebuie să facem un tur de fluier în Lua. Interpretul Lua (amintiți-vă că este un limbaj de script, nu un limbaj compilat) este disponibil pentru Windows, OS X și Linux. Cu toate acestea, este încorporat în Corona, așa că în acest moment nu trebuie să instalați nimic în plus. Cel mai simplu mod de a juca cu Lua este să utilizați demo-ul online live.

Puteți găsi o mulțime de tutoriale bune despre Lua online și ar trebui să aruncați o privire la Manualul de referință Lua, Programarea în Lua, The.Lua.Tutorial și Tutoriale Punctul Lua.

Iată un mic program Lua care vă va arăta câteva dintre caracteristicile cheie ale Lua:

funcția locală doubleIt (x) return x * 2 end pentru i = 1,10,1 do x = doubleIt (i) dacă (x == 10) atunci imprimați ("zece") altfel imprimați (doubleIt (i)) end end

Codul de mai sus arată trei construcții Lua importante: funcții, bucle și instrucțiuni if. Functia doubleIt () este foarte simplu, doar dublează trecerea în parametru X.

Codul principal este a pentru bucla de la 1 la 10. Se apelează doubleIt () pentru fiecare iterație. Dacă valoarea returnată este 10 (adică când eu este 5) atunci codul tipărește „zece”, altfel doar imprimă rezultatul doubleIt ().

Dacă aveți experiență de codare, atunci codul de exemplu ar trebui să fie suficient de ușor de urmărit. Dacă doriți să învățați unele programe de bază, atunci vă sugerez să utilizați unele dintre resursele legate mai sus pentru a vă perfecționa abilitățile.

Scrierea jocului

Scrierea unor programe de bază în Corona este simplă. Trebuie să vă preocupați doar de un singur fișier, main.lua, și lasă Corona să facă toată ridicarea grea. Jocul pe care îl vom scrie este un simplu joc „tap”. Un balon sau o bombă vor eșua pe ecran. Dacă jucătorul apasă pe balon, marchează un punct, atinge o bombă, atunci scorul va fi împărțit la 2, ca penalizare. Pentru a scrie codul pe care trebuie să îl editați main.lua. Puteți face acest lucru în orice editor de text.

Corona SDK are un motor de fizică 2D încorporat, ceea ce face jocurile de construcție foarte ușoare. Primul pas în scrierea jocului este inițializarea motorului fizicii:

local physics = necesită ("physics") physics.start ()

Codul este destul de autoexplicativ. Fizica modulului este încărcată și inițiată, este atribuită variabilei fizică. Pentru a activa motorulphysics.start () se numește.

În continuare, vom crea câteva variabile utile care vor fi utile nu numai pentru acest joc simplu, ci și pentru jocuri mai complexe. halfW și halfH mențineți valorile pentru jumătate din lățimea ecranului și jumătate din înălțimea ecranului:

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

afişa obiect este un obiect predefinit pe care Corona îl pune la dispoziție la nivel global.

Acum vine primul pas care face să se întâmple ceva pe ecran:

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

La fel ca și proprietăți de genul contentHeight și contentWidth, afişa obiectul are, de asemenea, o mulțime de funcții utile. imagine noua() funcția citește un fișier imagine (în acest caz, .png) și îl afișează pe ecran. Obiectele afișate sunt redate în straturi, astfel încât aceasta este prima imagine pe care o punem pe ecran, atunci va fi întotdeauna fundalul (cu excepția cazului în care codul face în mod explicit ceva pentru a schimba asta). Parametrii halfW și halfH spuneți-i Coronei să plaseze imaginea la mijloc.

În acest moment puteți rula codul în emulator și puteți vedea imaginea de fundal. Dacă salvați fișierul, emulatorul va observa că fișierul s-a modificat și va oferi relansarea. Dacă acest lucru nu se întâmplă, folosiți fișier-> Relansare.

Întrucât utilizatorul va înscrie puncte pentru atingerea baloanelor, trebuie să inițiem o variabilă de scor și să afișăm scorul pe ecran:

punctaj = 0 scorText = display.newText (scor, jumătateW, 10)

Scorul va fi păstrat în variabila numită imaginativ scor,și scoreText este obiectul care afișează scorul. Ca imagine noua(), newText () pune ceva pe ecran, în acest caz text. De cand scoreText este o variabilă globală, atunci putem modifica textul în orice moment. Dar vom ajunge la asta în curând.

Puteți relansa emulatorul și puteți vedea scorul de 0 afișat către partea de sus a ecranului.

Stânga: Doar fundalul. Corect: fundal și punctaj.

Acum vine ceva mai complicat, dar nu vă faceți griji, o să vă explic linie cu rând:

local function balloonTouched (event) if (event.phase == "a început"), apoi Runtime: removeEventListener ("enterFrame", event.self) event.target:removeSelf () scor = punctaj + 1 punctajText.text = punctaj final final

Codul de mai sus definește o funcție numită balloonTouched () care va fi apelat de fiecare dată când un balon este lovit. Încă nu i-am spus lui Corona să apeleze această funcție de fiecare dată când este apăsat balonul, asta va veni mai târziu, dar atunci când facem aceasta este funcția care este apelată.

Evenimentele atingeți sau atingeți au mai multe etape, multe pentru a susține glisarea. Utilizatorul pune degetul pe un obiect, aceasta este faza „început”. Dacă alunecă cu degetul în orice direcție, aceasta este faza „mișcată”. Când utilizatorul ridică degetul de pe ecran, aceasta este faza „încheiată”.

Prima linie de balloonTouched () verificăm că suntem în faza „început”. Vrem să eliminăm balonul și să creștem scorul cât mai curând posibil. Dacă funcția este apelată din nou pentru alte faze precum „încheiat”, atunci funcția nu face nimic.

În interioruldacă instrucțiunea sunt patru linii de cod. Să ne ocupăm de ultimele două, deoarece acestea sunt mai simple.punctaj = punctaj + 1 doar crește scorul cu unu șiscoreText.text = scor schimbă textul scorului de pe ecran pentru a reflecta noua partitură. Amintiți-vă cum am spus astascoreText era globală și putea fi accesată oriunde, bine asta facem aici.

Acum pentru primele două rânduri. Odată ce un balon sau o bombă se încadrează în partea de jos a ecranului, acesta încă mai există în memoria aplicației, este doar posibil să nu îl poți vedea. Pe măsură ce jocul progresează, numărul acestor obiecte de pe ecran va crește constant. Prin urmare, trebuie să avem un mecanism care să șteargă obiectele odată ce acestea nu sunt văzute. Facem asta într-o funcție numităoffscreen, despre care nu am scris încă. Această funcție va fi apelată o dată pe cadru în timpul jocului. Odată ce un balon a fost atins, atunci trebuie să îl ștergem și să eliminăm apelul care verifică dacă balonul a ieșit pe ecran.

Liniaevent.target:removeSelf () șterge balonul Când are loc un eveniment tactil, unul dintre parametrii funcției ascultător esteeveniment parametru. Acesta spune funcția despre eveniment și ce tip de eveniment este, de ex.event.phase. Ne spune și ce balon a fost lovit,event.target. removeSelf () funcția face ceea ce spune că face, șterge obiectul (în acest caz, un balon).

Linia înainte de a elimina ascultătorul „enterframe”, care este funcția numită fiecare cadru pentru a vedea dacă balonul a căzut de pe partea de jos a ecranului. Vom analiza acest lucru mai detaliat când vom veni să scriemoffscreen funcția de ascultător.

Deci, să recapitulăm.balloonTouched ()verifică dacă acesta este începutul secvenței de atingere. Apoi elimină ascultătorul „enterframe”, care este funcția care se numește la fiecare cadru pentru a vedea dacă balonul a căzut de pe fundul ecranului. Apoi șterge balonul, crește scorul și afișează noul scor.

Asta a fost pentru baloane, acum avem nevoie de ceva similar pentru bombe:

funcția locală bombTouched (event) if (event.phase == "a început") apoi Runtime: removeEventListener ("enterFrame", event.self) event.target:removeSelf () score = math.floor (score * 0,5) scoreText.text = punctaj final final

După cum puteți vedea, codul este foarte similar cu excepția faptului că, în loc să crească scorul, scorul este înmulțit cu 0,5 (adică împărțit la 2). Math.floor () funcția rotunjește scorul la cel mai apropiat număr întreg. Deci, dacă jucătorul avea un scor de 3 și ar atinge o bombă, noul scor va fi 1, și nu 1,5.

Am menționat offscreen () funcționează mai devreme. Această funcție va fi denumită fiecare cadru pentru a verifica dacă un obiect a ieșit de pe ecran. Iată codul:

funcția locală offscreen (self, event) if (self.y == nil) apoi return end if (self.y> display.contentHeight + 50) apoi Runtime: removeEventListener ("enterFrame", self) self: removeSelf () end end

În calcul există o situație cunoscută sub numele de condiție de cursă. Aici se vor întâmpla două lucruri, dar unul s-ar putea întâmpla întâi sau uneori celălalt s-ar putea întâmpla mai întâi. Este o cursă. Unele condiții de cursă nu sunt văzute, întrucât un lucru pare întotdeauna să se întâmple mai întâi, dar pot provoca bug-uri interesante în acea zi, în condiții potrivite, celălalt lucru se întâmplă mai întâi și apoi sistemul se sparge!

Există o condiție de cursă în acest joc simplu, deoarece două lucruri se pot întâmpla foarte aproape unul de celălalt: un balon fiind apăsat și offscreen () funcție fiind apelată pentru a vedea dacă balonul a ieșit de pe ecran. Rezultatul este că se poate apela codul pentru ștergerea balonului și apoi offscreen () funcție se numește (care se întâmplă de 30 de ori pe secundă). Pentru a ocoli această secvență ciudată de evenimente offscreen () funcția trebuie să verifice dacă y valoarea obiectului este zero (nul) sau nu. Dacă este zero atunci înseamnă că obiectul a fost șters deja, deci treceți, acestea nu sunt droidurile pe care le căutăm.

Dacă obiectul este încă în joc, verificați poziția acestuia, dacă a ieșit 50 de pixeli de pe ecran, apoi ștergeți-l și îndepărtați ascultătorul astfel încât offscreen () funcția nu va fi apelată din nou pentru acest obiect. Codul pentru a vă asigura căoffscreen () se numește fiecare cadru face parte din următoarea secțiune a codului.

Întreaga premisă a acestui joc este că noi baloane sau bombe vor continua să renunțe la ecran. Prin urmare, avem nevoie de o funcție care să creeze fie un nou balon sau o bombă nouă:

funcția locală addNewBalloonOrBomb () start localX = math.random (display.contentWidth * 0.1, display.contentWidth * 0.9) if (math.random (1,5) == 1) atunci - BOMB! local bomb = display.newImage ("bomb.png", startX, -300) physics.addBody (bomba) bomb.enterFrame = offscreen Runtime: addEventListener ("enterFrame", bomba) bombă: addEventListener ("atingere", bombTouched) altceva - Balloon local balloon = display.newImage ("red_balloon.png", startX, -300) physics.addBody (balon) balloon.enterFrame = offscreen Runtime: addEventListener ("enterFrame", balon) balon: addEventListener ("atingere", balonTouched) capăt final

Prima linie a funcției decide de unde va cădea balonul pe X avion. Dacă balonul sau bomba au căzut întotdeauna la mijloc, nu va fi foarte interesant! Asa destartx este un număr aleatoriu între 10% și 90% din lățimea ecranului.

În continuare, un număr aleatoriu este ales între 1 și 5.Dacă numărul este 1, atunci o bombă va fi aruncată. Dacă este 2, 3, 4 sau 5, atunci un balon va fi aruncat. Aceasta înseamnă că bombele vor fi aruncate în jur de 20 la sută din timp.

Codul bombă și balon sunt destul de asemănătoare. În primul rând, imaginea (fie o bombă, fie un balon) este afișată folosindimagine noua(). Este X poziția este cea astartx în timp ce y poziția este setată la -300, adică în partea de sus a ecranului. Motivul pentru asta este că dorim ca obiectul să cadă din afara zonei ecranului în zona vizibilă și apoi în jos. Deoarece folosim motorul 2D fizică este bine să oferim obiectului un pic de distanță inițială pentru a cădea, astfel încât să poată câștiga o anumită viteză.

Apelul laphysics.addBody () preia imaginea încărcată de imagine noua() și îl transformă într-un obiect din motorul fizicii. Acest lucru este foarte puternic. Orice fișier imagine poate fi transformat într-un corp care răspunde la gravitație și coliziuni doar apelândphysics.addBody ().

Ultimele trei linii ale codului bombei sau ale balonului au stabilit ascultătorii. SetareaenterFrame proprietatea spune Corona la ce funcție să apeleze fiecare cadru și apelRuntime: addEventListener () o stabilește. În sfârșit, apelul labalon: addEventListener () îi spune lui Corona ce funcție să apeleze dacă bomba sau balonul este atins.

Și acum jocul este aproape complet. Avem nevoie doar de alte două linii de cod:

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

Prima linie face ca prima bombă sau balon să cadă prin apelul explicitaddNewBalloonOrBomb (). A doua linie stabilește un cronometru care va apelaaddNewBalloonOrBomb () la fiecare jumătate de secundă (500 de milisecunde). Aceasta înseamnă că un nou balon sau bombă va cădea la fiecare jumătate de secundă.

Acum puteți rula jocul în emulator.

Iată lista completă pentru main.lua, codul sursă complet al acestui joc poate fi găsit aici pe GitHub.

-------------------------------------------------- ---------------------------------------- - - Jocul cu baloane și bombe care se încadrează - Scris de Gary Sims pentru -------------------------------------------------- ---------------------------------------------- - Începeți physics engine local physics = require ("physics") physics.start () - Calculați jumătatea lățimii ecranului și înălțimea jumătateW = display.contentWidth * 0,5 halfH = display.contentHeight * 0,5 - Setați fundalul local bkg = display.newImage ("night_sky.png", halfW, halfH) - Scor scor = 0 scoreText = display.newText (scor, halfW, 10) - Apelat când balonul este apăsat de jucător - Măriți scorul cu 1 funcție locală balon event) if (event.phase == "a început"), apoi Runtime: removeEventListener ("enterFrame", event.self) event.target:removeSelf () punctaj = punctaj + 1 scoreText.text = punctaj final final - Apelat când bomba este apăsată de jucător - Jumătate de scor ca o funcție locală de penalizare bombTouched (event) if (event.phase == "a început") apoi Runtime: removeEventListener ("enterFrame", event.self) event.target:removeSelf () score = math.floor (scor * 0,5) scoreText.text = scor final end - Ștergeți obiectele care au căzut din partea de jos a ecranului funcția locală offscreen (self, event) if (self.y == nil) apoi returnează sfârșitul if (self.y> display.contentHeight + 50) apoi Runtime: removeEventListener ("enterFrame", self) self: removeSelf () end end - Adăugați o nouă funcție locală de balon sau bombă addNewBalloonOrBomb () - Puteți găsi red_ballon.png și bomb.png în GitHpo repo local startX = math.random (display.contentWidth * 0.1, display.contentWidth * 0.9) if (math.random (1,5) == 1) atunci - BOMB! local bomb = display.newImage ("bomb.png", startX, -300) physics.addBody (bomba) bomb.enterFrame = offscreen Runtime: addEventListener ("enterFrame", bombă) bombă: addEventListener ("atingere", bombTouched) altceva - Balloon local balloon = display.newImage ("red_balloon.png", startX, -300) physics.addBody (balon) balloon.enterFrame = offscreen Runtime: addEventListener ("enterFrame", balon) balon: addEventListener ("atingere", balloonTouched) end end - Adăugați acum un nou balon sau o bombă addNewBalloonOrBomb () - Continuați să adăugați un nou balon sau bombă la fiecare 0,5 secunde timer.performWithDelay (500, addNewBalloonOrBomb, 0)

Pasii urmatori

Următorul pas este să joci jocul pe un dispozitiv Android adevărat. Pentru a construi un fișier .apk, faceți clic pe File-> Build pentru Android ... și completați câmpurile. Rezultatul va fi un fișier .apk pe care îl puteți copia pe dispozitiv și apoi instala. Va trebui să vă asigurați că ați configurat dispozitivul pentru a permite instalarea aplicației din surse necunoscute. Amazon are o documentație bună în acest sens, de asemenea, trebuie să setați aceasta pentru a instala Amazon Appstore. Corona are, de asemenea, un ghid despre cum să semnați, construiți și testați aplicația pe dispozitivele Android.

Cu jocul instalat cu succes pe dispozitivul dvs. următorul lucru este să îmbunătățiți jocul. De exemplu, de ce nu încercați să adăugați un sunet „pop” sau „bang” în tot ceea ce un balon sau o bombă este lovit. Corona are o API pentru asta:media.playEventSound ().

Sau de ce nu încercați să adăugați un al treilea tip de obiect, să spuneți un super impuls care dublează scorul actual, sau ce zici de muzică de fundal?

Învelire

Scrierea jocurilor cu Corona este destul de simplă, deoarece SDK se ocupă de lucruri precum OpenGL și include un motor integrat pentru fizică 2D. De asemenea, Lua este ușor de învățat și nu ar trebui să fie greu pentru nimeni cu minim de experiență de programare. Site-ul Coronalabs are o mulțime de documentații, inclusiv ghiduri și tutoriale.

În mai puțin de 100 de linii de cod avem un joc de lucru. OK, nu va câștiga niciun premiu, dar arată puterea și flexibilitatea SDK Corona.

Ete aproape impoibil ca o companie ă aibă ucce atăzi fără pecialiti EO i marketing digital. Ete uficient ă punem că oportunitățile de muncă unt abundente și dacă doriți ă dețineți una, afacerea de ată...

Întrebați orice profeionit în domeniul tehnologiei și vă vor pune că o prezență puternică online ete o cheie a ucceului în lumea digitală. Ete extrem de important ă articulați articolel...

Popular Astăzi