skabe et fly sporten i corona: mere gameplay

, skabe et fly sporten i corona: mere gameplay,,,,, 22,,,,,,,,,,,,,,,, det cyber - mandag envato tuts + kurser vil blive reduceret til $3.- og' t miss. denne post er en del af en serie kaldet skabe et fly sporten i corona. skabe et fly sporten i corona: gameplaycreate et fly sporten i corona: færdigbehandling gameplay,,, hvad du vil lave,,, indledningen, i den foregående resten af denne serie, vi startede gennemførelsen af spillet er gameplay og allerede kunnet få flyet rundt på skærmen.i denne forelæsning, vil vi fortsætte med at gennemføre gameplay.lad os dykke ind med, starttimers,.,,, 1.  , starttimers, som navnet angiver, starttimers, funktion begynder timerne.der tilføjes følgende kode, gamelevel. lua,.,, funktion starttimers() ende, kan påberåbe sig denne funktion i den, enterscene, metode, som vist nedenfor.,, funktion scene: enterscene (tilfælde) lokale planesound = lyd. loadstream ("planesound. mp3 -") planesoundchannel = audio. spille (planesound, {loops = - 1}) runtime: addeventlistener ("enterframe", gameloop) starttimers() ende, 2.  , fireplayerbullet,,, fireplayerbullet, funktion, skaber en kugle for spiller.,,, funktion fireplayerbullet() lokale tempbullet = opvisning. newimage ("patron. men heller ikke dér er menneskene sikre" (spiller. x + playerwidth /2) - bulletwidth, spiller. y-bulletheight) tabel. indsæt (playerbullets, tempbullet); planegroup: indsæt (tempbullet) ende, her bruger vi skærmen   objekt er, newimage,   metodefor at skabe den kugle.vi holdning, som det på en sådan måde, at det er i midten af flyet på x - aksen og øverst på flyet på y - aksen.kuglen er indføjet i, playerbullets, tabel for senere reference - og også i, planegroup,.,,. 3.kald, fireplayerbullet, er vi nødt til at kalde det, fireplayerbullet, fungere regelmæssigt for at sikre, at spilleren er fly automatisk kugler.der tilføjes følgende kode snippet i, starttimers,.,, funktion starttimers() fireplayerbullettimer = timer. performwithdelay (2000 fireplayerbullet - 1), der, som navnet antyder, tiden er  , performwithdelay, metode kræver en bestemt funktion efter en vis tid er forbi.tiden er i millisekunder, så er vi her kalder, fireplayerbullet,   fungere hver to   sekunder.ved at vedtage - 1, som er det tredje argument, timeren vil gentage for evigt.,, hvis du tester kampen nu, du skal se, at hver to sekunder en kugle ud.men de bevæger sig ikke.vi vil sørge for, at det i de kommende skridt.,, 4., moveplayerbullets,,, moveplayerbullets, vi loop gennem  , playerbullets,   tabel og ændre  , y,   koordinere hver kugle.vi tjekker, at den  , playerbullets,   tabel har kugler i den.den  , #,   før  , playerbullets,   kaldes  , længde,   operatør, og det afkast, længden af den genstand, den er pålagt.det er nyttigt at vide, at  , #,   operatøren arbejder også på strenge.,,, hvis funktion moveplayerbullets() (# playerbullets > 0) for i = 1,&#playerbullets gøre playerbullets [i].y = playerbullets [i]. y - 7 ende afslutning, er vi nødt til at påberåbe sig, moveplayerbullets, i  , gameloop,   funktion som vist nedenfor.,, funktion gameloop()... klip... numberofticks = numberofticks + 1 moveplayer() moveplayerbullets() ende, 5.  , checkplayerbulletsoutofbounds, når en kugle er væk det er ikke længere relevante til kampen.men de er stadig en del af den, playerbullets, tabel og fortsætte som enhver anden kugle i tabellen.det er spild af ressourcer, og hvis kampen var at gå på i meget lang tid, vil det resultere i hundreder eller tusinder af ubrugte objekter.,, at overvinde denne, vi overvåger de kugler, og når de flytter væk, vi fjerner dem fra, playerbullets, tabel samt fra fra displayet.tag et kig på gennemførelsen af  , checkplayerbulletsoutofbounds,.,, hvis funktion checkplayerbulletsoutofbounds() (# playerbullets > 0) for i =&#playerbullets, 1 - 1, hvis (playerbullets [i]. y < - 18), så playerbullets [i]: removeself() playerbullets [i] = 0 tabel. fjerne (playerbullets, jeg) ende afslutning, er det vigtigt at bemærke, at vi er skruet gennem, playerbullets, tabel i baglæns.hvis vi loop gennem bordet fremad, og når vi fjerner et af de kugler, det ville kaste ni indeks og forårsager en fejl.ved at manipulere over bordet i omvendt rækkefølge, den sidste kugle er allerede behandlet.det, removeself, metode   fjerner display formål og befrier sit minde.som en bedste praksis, der bør fastsættes af genstande til nul efter opfordring, removeself,.,, vi påberåber os i denne funktion i den  , gameloop,   funktion.,, funktion gameloop()... klip... moveplayer() moveplayerbullets() checkplayerbulletsoutofbounds(),, hvis du ønsker at se, hvis denne funktion virker korrekt, midlertidigt kan indsætte et fingeraftryk ("fjerne kugle"),   erklæring umiddelbart efter, at de udviser mod, nul,.,, 6.  , generateisland, for at gøre kampen mere interessant er, at vi skaber en ø med mellemrum, og kom så ned på skærmen til at give det udseende af flyet flyver over øerne.der tilføjes følgende kode snippet for, generateisland,.,, funktion generateisland() lokale tempisland = opvisning. newimage ("island1. men heller ikke dér er menneskene sikre" matematik. tilfældige (0, display.contentwidth - islandwidth), - islandheight) tabel. indsæt (øer, tempisland) islandgroup: indsæt (tempisland) ende, vi gør brug af den metode, newimage, endnu en gang og position på øen ved at fastsætte en negativ værdi for, islandheight,.for, x, holdning, vi bruger, math.random, metode   at generere et nummer mellem 0 og, display, er  , contentwidth,   minus, islandwidth,.grunden til, at vi trækker bredde på øen   er at sikre øen er fuldstændig på skærmen.hvis vi ikke ville trække øens bredde, ville der være en chance for, at en del af   ø, ville ikke være på skærmen.,, er vi nødt til at starte en timer til at skabe en ø med mellemrum.der tilføjes følgende indlæg til det, starttimers, funktion, skabte vi tidligere.som du kan se, har vi   skaber en ø,  , fem   sekunder.i løbet af de næste skridt, vil vi gøre øer.,, funktion starttimers() fireplayerbullettimer = timer. performwithdelay (2000 fireplayerbullet - 1) generateislandtimer = timer. performwithdelay (5000, generateisland - 1), 7., moveislands, gennemførelsen af moveislands, er næsten identisk med den  , moveplayerbullets,   funktion.vi tjekker, om  , øer,   tabel indeholder alle øer, og hvis det gør, vi loop gennem det og gå hver ø en smule.,,, hvis funktion moveislands() (# øer > 0) for i = 1,&#øer kan øer [i]. y = øer [jeg]. y + 3 sidste ende ende, 8., checkislandsoutofbounds, ligesom vi kontrollere, om deres kugler har flyttet væk, vi tjekker, om nogen af de øer havde flyttet væk fra skærmen.gennemførelsen af checkislandsoutofbounds,   bør derfor bekendt ud.vi tjekker, om øerne  , y,   holdning er større end  , display. contentheight,   og, hvis det er, og vi ved, øen har flyttet væk og kan derfor udgå, hvis funktion checkislandsoutofbounds() (# øer > 0) for i =&#øer, 1 - 1. hvis (øer [i]. y > opvisning. contentheight) og øer [i]: removeself() øer [i] = 0 tabel. fjerne (øer, jeg sidst ende), 9.  , generatefreelife, alle så ofte, spiller, har en chance for at få et frit liv.vi skaber et frit liv image, og hvis spiller kolliderer med det billede, de får et ekstra liv.spilleren kan have en frist på seks   liv.,, funktion generatefreelife (), hvis numberoflives > = 6) så udsugningsenden lokale freelife = opvisning. newimage ("newlife. men heller ikke dér er menneskene sikre" matematik. tilfældige (0, display.contentwidth - 40) 0); tabel. indsæt (freelifes, freelife) planegroup: indsæt (freelife), hvis spiller allerede har seks   liv, vi gør ikke noget ved at vende tilbage i begyndelsen af denne funktion.hvis ikke, skaber vi et nyt liv image og lægger det på skærmen.i lighed med, hvordan vi placeret øerne tidligere fastsatte vi billedet ved en negativ, y, holdning og skabe et tilfældigt værdi for billede er, x,   holdning.så sæt den i  , freelifes,   bord skal være i stand til at henvise det senere, er vi nødt til at kalde denne funktion tit.der tilføjes følgende indlæg til det, starttimers,.,, funktion starttimers() fireplayerbullettimer = timer. performwithdelay (2000 fireplayerbullet - 1) generateislandtimer = timer. performwithdelay (5000, generateisland - 1) generatefreelifetimer = timer. performwithdelay (7.000, generatefreelife - 1), 10., movefreelives, gennemførelsen af movefreelifes, ser bekendt ud.vi er skruet gennem  , freelifes,   tabel og hvert billede i.,,, hvis funktion movefreelifes() (# freelifes > 0) for i = 1,&#freelifes gøre freelifes [i]. y = freelifes [i]. y + 5 afslutning sidst ende, har vi brug for bare ring, movefreelifes, i  , gameloop,   funktion.,, funktion gameloop()... klip... checkislandsoutofbounds() movefreelifes() ende, 11.  , checkfreelifesoutofbounds, følgende kode snippet bør også bekendt ud nu.vi tjekker, om nogen af de billeder i, freelifes, tabel har flyttet væk og fjerne dem, der har, hvis funktion checkfreelifesoutofbounds() (# freelifes > 0) for i =&#freelifes, 1 - 1, hvis (freelifes [i]. y > opvisning. contentheight) så freelifes [i]: removeself() freelifes [i] = 0 tabel. fjerne (freelifes, jeg sidst ende), kalder vi denne funktion i den, gameloop,   funktion.,, funktion gameloop()... klip... checkislandsoutofbounds() movefreelifes() checkfreelifesoutofbounds() ende, 12.  , hascollided, skal vi kunne at vide, hvornår spillet genstande kolliderer med hinanden, f.eks. deres fly og det frie liv billeder, kugler og planes osv. mens corona giver en meget robust fysik motor, der let kan klare sammenstød mellem display - objekter til os, det er en smule op med de beregninger, motoren har at gøre hver frame., i forbindelse med denne kamp, vi vil anvende en enkelt tegnkasse kollision detection system.hvad denne funktion omfatter, er sikre, kvadratisk eller rektangulær form, ubearbejdet eller afgrænser kasser omkring to genstande ikke overlapper hinanden.hvis de gør, objekter støder sammen.denne logik er gennemført i, hascollided,.,, funktion hascollided (obj1, obj2) hvis (obj1 = = 0) så vende falske, hvis (obj2 = = 0) så vende falske ende lokale forlod = obj1.contentbounds.xmin < = obj2.contentbounds.xmin og obj1.contentbounds.xmax > = obj2.contentbounds.xmin lokale ret = obj1.contentbounds.xmin > = obj2.contentbounds.xmin og obj1.contentbounds.xmin < = obj2.contentbounds.xmax lokale op = obj1.contentbounds.ymin < = obj2.contentbounds.ymin og obj1.contentbounds.ymax > = obj2.contentbounds.ymin lokale down = obj1.contentbounds.ymin > = obj2.contentbounds.ymin og obj1.contentbounds.ymin < = obj2.contentbounds.ymax afkast (venstre eller ribekæmpelse af) og (eller), fandt jeg denne kode snippet på coronalabs websted.det virker, fordi kampen objekter i vores spil er rektangulære.hvis du arbejder med formål, der ikke er kvadratiske, så må du hellere udnytte corona er fysik motor, som dens kollision påvisning er meget optimeret til.,, 13.  , checkplayercollideswithfreelife, vil vi kontrollere, om deres fly er kolliderede med et frit liv objekt.hvis det er, så vi tildeler spiller et frit liv.,, hvis funktion checkplayercollideswithfreelife() (# freelifes > 0) for i =&#freelifes, 1 - 1, hvis (hascollided (freelifes [i], spiller)), så freelifes [i]: removeself() freelifes [i] = intet tab. fjern (freelifes, jeg) numberoflives = numberoflives + 1 hidelives() showlives() ende afslutning sidst ende i, checkplayercollideswithfreelife, funktion,   vi loop gennem, freelives,   tabel tilbage af samme grund, jeg nævnte tidligere.vi kalder den, hascollided, funktion og består i den nuværende image og deres fly.hvis de to ting støder sammen, vi fjerner det frie liv image, tilvækst, numberoflives, variable, og ringe til, hidelives, og showlives,.,, vi påberåber os i denne funktion i den, gameloop,   funktion.,, funktion gameloop()... klip... movefreelifes() checkfreelifesoutofbounds() checkplayercollideswithfreelife() ende, 14.  , hidelives,,, hidelives, funktion loops gennem, livesimages, tabel og fastsætter, isvisible, ejendom af hvert life image, falske,.,, funktion hidelives() for i = 1, 6 livesimages [i]. isvisible = falske afslutning, af 15.  , showlives,,, showlives,   funktion loops gennem, livesimages, tabel og fastsætter hvert billede er, isvisible, ejendom,,.,, funktion showlives() fori = 1, numberoflives gøre livesimages [i]. isvisible = sandt, og sidst ende, konklusion, det bringer den tredje del af denne række til en tæt på.i den næste og sidste del af denne serie, vil vi skabe fjendens fly og afsluttet kampen er gameplay.tak for at læse og se dig der.

Final product image



Previous:
Next Page: