skabe et fly sporten i corona: færdigbehandling gameplay

, skabe et fly sporten i corona: færdigbehandling gameplay,,,,, 36,,,,,,,,, 6,,,,,,, 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: mere gameplay,,, hvad du vil lave,,, indledningen, i den fjerde og sidste del af denne serie, fortsætter vi, hvor vi til venstre for i den foregående tutor.vi vil skabe af fjendens fly spilleren skal undgå eller skyde, og vi vil også skabe et game over skærmen.,,, 1.  , generateenemys,,, generateenemys, funktion, skaber en række mellem tre og syv, og kræver, at de, generateenemyplane, funktion, to sekunder, men mange gange, numberofenemystogenerate, er lig med.anføre følgende kode snippet, gamelevel. lua,.,, funktion generateenemys() numberofenemystogenerate = matematik. tilfældige (3,7) timer. performwithdelay (2000 generateenemyplane, numberofenemystogenerate), er vi også nødt til at påberåbe sig denne funktion i den, enterscene, metode, som vist nedenfor.,, funktion scene: enterscene (tilfælde). klip... runtime: addeventlistener ("enterframe", gameloop) starttimers() generateenemys(), lad os se, hvad gennemførelsen af  , generateenemyplane, ligner., 2.  , generateenemyplane,,, generateenemyplane, funktion, producerer et fjendtligt fly.der er tre typer af fjendens fly i dette spil,.,,, regelmæssige,  , bevæger sig ned på skærmen i en lige linje, vakle, bevæger sig i et bølgemønster på x   akse ", jagter deres fly, hvis funktion generateenemyplane() (gameover ~ = sand) og lokale randomgridspace = matematik. tilfældige (11) lokale randomenemynumber = matematik. tilfældige (3) lokale tempenemy hvis (planegrid [randomgridspace] ~ = 0), så generateenemyplane() tilbage ellers hvis (randomenemynumber = = 1), så tempenemy = opvisning. newimage (" enemy1. men heller ikke dér er menneskene sikre "(randomgridspace * 65) - 28 - 60) tempenemy.type =" almindelige "elseif (randomenemynumber = = 2) tempenemy = opvisning. newimage (" enemy2. men heller ikke dér er menneskene sikre ", display.contentwidth/2 - playerwidth /2 - 60) tempenemy.type = vakler "andre tempenemy = opvisning. newimage (" enemy3. men heller ikke dér er menneskene sikre "(randomgridspace * 65) - 28 - 60) tempenemy.type =" køber "ende planegrid [randomgridspace] = 1, tabel. indsæt (enemyplanes, tempenemy) planegroup: indsæt (tempenemy) numberofenemysgenerated = numberofenemysgenerated + 1, hvis (numberofenemysgenerated = = numberofenemystogenerate), så numberofenemysgenerated = 0, resetplanegrid() timer. performwithdelay (2000 generateenemys, 1) og sidst, vi tjekker, at spillet er ikke slut endnu.vi må skabe en, randomgridspace, en række mellem  , 1, og  , 11, og en tilfældig, randomenemynumber, en række mellem  , 1,   og  , 3.det, randomgridspace, anvendes til holdning flyet i et af 11   ankomst - og afgangstidspunkter øverst på x   akse.hvis du tror på spillet område opdeles i elleve afdelinger, så vi kun ønsker at markedsføre nye fly i en stand, der ikke er truffet af et andet fly.det, planegrid, tabel indeholder 11, 0, er  , og når vi et nyt fly i en af de   ankomst - og afgangstidspunkter, sætter vi den tilsvarende position i tabel 1, for at angive, at sprække er blevet taget af en fly.,, tjekker vi, hvis indekset for, randomgridspace,   i bordet er ikke lig med 0,.hvis det ikke er,   ved vi, at sprække er ved taget, og vi bør ikke fortsætte, så vi kalder, generateenemyplane, og vende tilbage   fra funktion.,,, så vi tjekker, hvad, randomenemynumber, er lig med og fastsat, tempenemy, til en af de tre fjendtlige billeder, vi også give den en ejendom, regelmæssige, vakle eller ".   fordi lua er en dynamisk sprog, kan vi tilføje nye egenskaber til et objekt i runtime.vi så, hvad indeks er lig med randomgridspace, til 1,   i, planegrid,   tabel., vi indsætter  , tempenemy, i, enemyplanes, tabel for senere henvisning og forøgelse  , numberofenemysgenerated,.hvis  , numberofenemysgenerated, er lig med  , numberofenemystogenerate, vi gør numberofenemysgenerated, til 0, påberåbe sig, resetplanegrid, og fastsætte en timer, der ringer, generateenemys,   igen efter to sekunder.   denne proces gentages, så længe spillet er ikke slut., 3., moveenemyplanes, som du måske har gættet, moveenemyplanes,   funktion er ansvarlig for, at fjendens fly.afhængigt af fly er, type, den relevante funktion kaldes.,, hvis funktion moveenemyplanes() (# enemyplanes > 0) for i = 1,&#enemyplanes gøre hvis (enemyplanes [i]. type = "almindelige"), så moveregularplane (enemyplanes [i]) elseif (enemyplanes [jeg]. type = "give"), så movewaverplane (enemyplanes [i]) andre movechaserplane (enemyplanes [i]) og sidste ende ende denne funktion skal være gældende i, gameloop,   funktion.,, funktion gameloop()... klip... checkfreelifesoutofbounds() checkplayercollideswithfreelife() moveenemyplanes(),, 4., moveregularplane,,, moveregularplane,   blot bevæger flyet ned skærmen på y - aksen.,, funktion moveregularplane (fly) fly. y = fly. y + 4, 5., movewaverplane,,, movewaverplane,   funktion bevæger flyet ned på skærmen i y - akse, og i et bølgemønster, i x   akse.dette opnås ved at anvende de  , for funktion af lua er matematik bibliotek.,, hvis dette begreb er fremmed for dig, michael james williams har skrevet en god introduktion til sinusformet forslag.de samme principper gælder, og den eneste forskel er, at vi bruger, cosinus,.du må synes, nødvendig, når vi beskæftiger os med y - aksen og cosinus, når det drejer sig om x   akse.,,, funktion movewaverplane (fly) fly. y = fly. y + 4 fly. x = (display. contentwidth /2) + 250 * matematik. - (numberofticks * 0, 5 * matematik. pi /30), i ovennævnte snippet, vi bruger, numberofticks, variabel.vi har brug for at forøge denne   hver gang, gameloop, funktion kaldes.der tilføjes følgende som den første linje i, gameloop,.,, funktion gameloop() numberofticks = numberofticks + 1, 6., movechaserplane,,, movechaserplane, funktion er flyet, der jagter,   spilleren.den bevæger sig ned med y - aksen ved en konstant hastighed og   det bevæger sig mod deres stilling på x - aksen.tag et kig på gennemførelsen af movechaserplane til klarlæggelse.,, funktion movechaserplane (fly), hvis (fly). < spiller. x) så fly. x = fly. x + 4, hvis (fly). > spiller. x) så fly. x = fly. x - 4 sidste fly. y = fly. y + 4,, hvis du tester kampen nu, du burde se flyene bevæger sig ned af skærmen. 7., fireenemybullets, tit, vi ønsker af fjendens fly til at fyre en kugle.vi vil ikke have dem alle fyre, men samtidig vælger vi så kun et par fly til ild.,, hvis funktion fireenemybullets() (# enemyplanes > = 2) og lokale numberofenemyplanestofire = matematik. etage (# enemyplanes /2) lokale tempenemyplanes = tabel. kopi (enemyplanes) lokale funktion firebullet() lokale randindex = matematik. tilfældigt&#tempenemyplanes) lokale tempbullet = opvisning. newimage ("patron. men heller ikke dér er menneskene sikre" (tempenemyplanes [randindex]. x + playerwidth /2) + bulletwidth, tempenemyplanes [randindex]. y + playerheight + bulletheight) tempbullet.rotation = 180 planegroup: indsæt (tempbullet) tabel. indsæt (enemybullets, tempbullet); tabel. fjerne (tempenemyplanes, randindex) for i = 0, numberofenemyplanestofire do firebullet() sidste ende, vi tjekker, at de, enemyplanes, tabel har mere end to fly i det.hvis det sker, får vi det, numberofenemyplanes, til at skyde med længden af det, enemyplanes,   tabel, dele det i to, og omkring det.vi gør også en kopi af den, enemyplanes, tabel, så vi kan manipulere det separat.,,,, firebullet, funktion, vælger et fly fra, tempenemyplanes, tabel, og som gør flyet skyder en kugle.vi skaber et tilfældigt tal baseret på længden af  , tempenemyplanes, tabel, skabe en kugle image, og   holdning, det   ved hjælp af den plan er i den, randindex,   i, tempenemyplanes, tabel.vi må fjerne det fly fra det midlertidige tab. for at sikre, at det ikke vil blive udvalgt igen næste gang, firebullet, kaldes.,,, vi gentager denne proces, uanset hvor mange gange, numerofenemyplanestofire, er lig med og kalde det, firebullet,.,,, er vi nødt til at starte timeren, der opfordrer denne funktion hver - ofte.for at opnå dette føje følgende til den, starttimers,.,, funktion starttimers() fireplayerbullettimer = timer. performwithdelay (2000 fireplayerbullet - 1) generateislandtimer = timer. performwithdelay (5000, generateisland - 1) generatefreelifetimer = timer. performwithdelay (7.000, generatefreelife - 1) fireenemybulletstimer = timer. performwithdelay (2000, fireenemybullets - 1), af 8.  , moveenemybullets, er vi også nødt til at flytte fjendens kugler, der er på skærmen.det er ret simpelt ved anvendelse af følgende kode snippet.,, hvis funktion moveenemybullets() (# enemybullets > 0) for i = 1,&#enemybullets gøre enemybullets [i].y = enemybullets [i]. y + 7 sidst ende, påberåbe sig denne funktion i den, gameloop,   funktion.,, funktion gameloop()... klip... checkplayercollideswithfreelife() moveenemyplanes() moveenemybullets() ende, 9.  , checkenemybulletsoutofbounds, ud over at flytte fjendens kugler, er vi nødt til at se, når fjenden kugler er gået skærmen og fjerne dem, når de gør det.gennemførelsen af checkenemybulletsoutofbounds, bør være bekendt med.,,, hvis funktion checkenemybulletsoutofbounds() (# enemybullets > 0) for i =&#enemybullets, 1 - 1, hvis (enemybullets [i]. y > opvisning. contentheight), så enemybullets [i]: removeself() enemybullets [i] = 0 tabel. fjerne (enemybullets, jeg) ende afslutning, kan påberåbe sig denne funktion i den, gameloop,   funktion.,, funktion gameloop()... klip... moveenemybullets() checkenemybulletsoutofbounds() ende, 10.  , checkenemyplanesoutofbounds, bør vi også kontrollere, om de fjendtlige fly har flyttet væk fra skærmen.,, hvis funktion checkenemyplanesoutofbounds() (# enemyplanes > 0) for i =&#enemyplanes, 1 - 1, hvis (enemypbaner [i]. y > opvisning. contentheight), så enemyplanes [i]: removeself() enemyplanes [i] = 0 tabel. fjerne (enemyplanes, jeg) ende afslutning, kan påberåbe sig denne funktion i den  , gameloop,   funktion, funktion gameloop()... klip... moveenemybullets() checkenemybulletsoutofbounds() checkenemyplanesoutofbounds() ende, 11.  , checkplayerbulletscollidewithenemyplanes,,, checkplayerbulletcollideswithenemyplanes, funktion, anvender den, hascollided, funktion, for at se, om nogen af deres kugler har kolliderede med en af fjendens fly.,, hvis funktion checkplayerbulletscollidewithenemyplanes() (# playerbullets > 0, og&#enemyplanes > 0) for i =&#playerbullets. - 1 -for j =&#enemyplanes, 1 - 1, hvis (hascollided (playerbullets [i], enemyplanes [j]) og playerbullets [i]: removeself() playerbullets [i] = 0 tabel. fjerne (playerbullets, jeg) generateexplosion (enemyplanes [j]. x, enemyplanes [j]. y) enemyplanes [j]: removeself() enemyplanes [j] = 0 tabel. fjerne (enemyplanes, j) lokale eksplosion = lyd. loadstream ("eksplosion. mp3 -") lokale backgroundmusicchannel = audio. spille (eksplosion, (fadein = 1000}) ende afslutning sidst ende denne funktion har to indlejrede   for, havregryn for at kontrollere, om genstande kolliderer.for hver af de, playerbullets, løber vi gennem alle de fly i, enemyplanes, tabel og kalder den, hascollided, funktion.hvis der er et sammenstød, vi fjerner kuglen og fly, ring til, generateexplosion,   funktion, og lasten og spille en eksplosion lyd.,,, kan påberåbe sig denne funktion i den, gameloop,   funktion.,, funktion gameloop()... klip... checkenemybulletsoutofbounds() checkenemyplanesoutofbounds() checkplayerbulletscollidewithenemyplanes() ende, 12.   generateexplosion,,,, generateexplosion, funktion bruger corona er spriteobject klasse.nisser mulighed for at opholde sig på animerede sekvenser af stel image eller sprite ark.ved at samle billeder i et enkelt billede, du kan få nogle billeder fra det image og skabe en informationskampagne sekvens.,, funktion generateexplosion (xposition, yposition) lokale muligheder = = 60 (bredde, højde = 49, numframes = 6) lokale explosionsheet = grafik. newimagesheet ("eksplosion. men heller ikke dér er menneskene sikre", optioner) lokale sequencedata = {{navn = "eksplosion", start = 1, grev = 6, tid = 400, loopcount = 1) lokale explosionsprite = opvisning. newsprite (explosionsheet, sequencedata) explosionsprite. x = xposition explosionsprite. y = yposition explosionsprite: addeventlistener ("ånd", explosionlistener) explosionsprite: play() ende,, newimagesheet, metode tager parametre, vejen til image og en tabel for options for sprite blad.de muligheder, der er, bredde, højde, og, numframes, hvor mange individuelle billeder, udgør dette blad.der er seks separate eksplosion billeder som vist i billedet nedenfor.,,,,, næste oprettede vi en tabel,  , sequencedata,, der er behov for, spriteobject,.vi sætter, start, ejendom, 1,,,,,,, og tiden til 400.  , start,   ejendom er billedet at informationskampagne vil begynde på, tælle, hvor mange billeder informationstiltag omfatter, og den tid,   ejendom er, hvor længe den informationskampagne, der skal til for at spille igennem.,, vi skaber, spriteobject, går på, explosionsheet,   og sequencedata,, der er x - og y -   holdninger, og at tilføje en til at lytte til den sprite.de lytter, vil blive brugt til at fjerne den sprite, når det har afsluttet sit liv. og 13.  , explosionlistener,,, explosionlistener, funktion, bruges til at fjerne den sprite.  , hvis den begivenhed, er fase, er ejendom   svarende til  , sluttede, så vi ved,   sprite har færdig med sin informationskampagne, og vi kan fjerne det.,, funktion explosionlistener (tilfælde), hvis event.phase = = "slut") og lokale eksplosion = event.target eksplosion: removeself() eksplosion = ingen ende, 14.  , checkenemybulletscollidewithplayer,,, checkenemybulletscollidewithplayer, kontrol for at se, om nogen af de fjender kugler kolliderer med deres fly, hvis funktion checkenemybulletscollidewithplayer() (# enemybullets > 0) for i =&#enemybullets, 1 - 1, hvis (hascollided (enemybullets [i], spiller)), så enemybullets [i]: removeself() enemybullets [i] = 0 tabel. fjerne (enemybullets, jeg), hvis playerisinvincible = = falsk), så killplayer() ende afslutning sidst ende, vi loop gennem, enemybullets, tabel og se, om nogen af dem har kolliderede med spiller.hvis det er sandt, at vi fjerner denne kugle, og, hvis  , playerisinvincible, er urigtige, vi påberåber os, killplayer,.,,, kan påberåbe sig denne funktion i den, gameloop, funktion.,, funktion gameloop()... klip... checkenemyplanesoutofbounds() checkplayerbulletscollidewithenemyplanes() checkenemybulletscollidewithplayer() ende, 15.  , killplayer,,, killplayer, funktion, er ansvarlig for at kontrollere, om de er spillet slut og gydepladser i en ny aktør, hvis det ikke er,,, funktion killplayer() numberoflives = numberoflives - 1; hvis (numberoflives = = 0), så gameover = sandt dogameover() andre spawnnewplayer() hidelives() showlives() playerisinvincible = sand afslutning, er det først og fremmest decrement, numberoflives, ved 1, og, hvis det er lig med  , 0, kalder vi det, gameover, funktion.det spiller liv tilbage, vi kalder, spawnnewplayer, efterfulgt af  , hidelives,, showlives, og fastsætte, playerisinvincible,  ,,.,,, 16.  , dogameover,,, dogameover, funktion, fortæller den skitse til at gå til den, gameover scene, fungerer. dogameover() skitse. gotoscene ("gameover"), 17., spawnnewplayer,,, spawnnewplayer, funktion, er ansvarlig for de nye spiller, efter de er døde.deres fly blinker i et par sekunder til at vise, at det er midlertidigt uovervindelig.,, funktion spawnnewplayer() lokale numberoftimestofadeplayer = 5 lokale numberoftimesplayerhasfaded = 0 lokale funktion fadeplayer() player.alpha = 0; overgangen. - spiller, {tid = 200, alpha = 1)) numberoftimesplayerhasfaded = numberoftimesplayerhasfaded + 1 (numberoftimesplayerhasfaded = = numberoftimestofadeplayer) så playerisinvincible = falske ende ender her. performwithdelay (400, fadeplayer, numberoftimestofadeplayer), at   gøre deres fly blink, vi   svinder ind og ud fem gange.i, fadeplayer, funktion, der er flyet, alpha,   ejendom, 0, som gør det mere gennemsigtigt.vi så bruge overgangen bibliotek til fade, alpha, tilbage til 1, over en periode på 200 millisekunder.det, at,   metode i  , overgangen, genstand   tager en tabel over muligheder.i vores eksempel, de muligheder, tabel indeholder en gang i millisekunder og ejendom, vi vil gerne animere, alfa, og den ønskede værdi, 1,.,, vi tillæg numberoftimestheplayerhasfaded,   og se, om det er lig med det antal gange, vi ønskede, at de spiller at falme.vi så, playerisinvincible,, falske.   vi bruge en timer at kalde den, fadeplayer, funktion, uanset hvor mange gange, numberoftimertofadeplayer, er lig med, er der en måde at gøre alt dette uden at bruge timer, og det er ved hjælp af overgangen, er iterationer,   ejendom i kombination med sin, oncomplete, chef.læse den dokumentation,   for at lære mere om den alternative metode,.,, 18.  , checkenemyplanecollideswithplayer, der er et sammenstød mere kontrol, bør vi gøre, og det er, at hvis et fjendtligt fly kolliderer med deres fly, hvis funktion checkenemyplanecollidewithplayer() (# enemyplanes > 0) for i =&#enemyplanes, 1 - 1, hvis (hascollided (enemyplanes [i], spiller)), så enemyplanes [i]: removeself() enemyplanes [i] = 0 tabel. fjerne (enemyplanes, jeg), hvis playerisinvincible = = falsk), så killplayer() ende afslutning sidst ende, vi sløjfe igennem fjendens fly og se, om nogen af dem kolliderer med deres fly.hvis det er sandt, at vi fjerner det fjendtlige fly og ringe, killplayer,.hvis du tror, det er spillet mere interessant, du også kan skabe en eksplosion her.,,, 19., exitscene, når kampen er forbi, vi overgang til, gameover, scene.kan du huske fra tidligere i ministeriet,  , exitscene,   funktion er, hvor du fjerne alle omstændigheder lyttere op timere, og stoppe audio - der spiller.,, funktion scene: exitscene (tilfælde) lokal gruppe = self.view rectup: removeeventlistener ("kontakt", moveplane) rectdown: removeeventlistener ("kontakt", moveplane) rectleft: removeeventlistener ("kontakt", moveplane) rectright: removeeventlistener ("kontakt", moveplane) lyd. - (planesoundchannel) audio. bortskaffelse (planesoundchannel) runtime: removeeventlistener ("enterframe", gameloop) canceltimers() sidste scene: addeventlistener ("exitscene", scene), er vi stort set, at det, vi gjorde, i, enterscene, funktion.vi kalder den, bortskaffelse, metoden, lyd, genstand   at frigive mindet forbundet med lydkanal.ringer op,   alene ikke frigive hukommelse.,, 20.  , canceltimers, som navnet angiver, canceltimers, funktion er det modsatte af  , starttimers,, der annullerer alle timerne.,, funktion canceltimers() timer. - (fireplayerbullettimer) timer. - (generateislandtimer) timer. aflys (fireenemybulletstimer) timer. - (generatefreelifetimer), 21.spillet er slut, scene, det er tid til at skabe, gameover, scene.start ved at tilføje en ny lua - fil til dit projekt ved navn, gameover. lua, og tilføje,   følgende kode til det.,, lokale storyboard = kræver ("storyboard") lokale scene = skitse. newscene() lokale gameovertext lokale newgamebutton tilbage scene, 22.  , createscene, føje følgende til gameover.lua frem for   tilbage her.fra nu af, kode bør anbringes over tilbage scene, erklæring.,, funktion scene: createscene (tilfælde) lokal gruppe = self.view lokal baggrund = opvisning. newrect (0, 0, display.contentwidth, display. contentheight) baggrund: setfillcolor (0, 39,. 75) gruppe: indsæt (baggrund) gameovertext = opvisning. newtext ("game over", display.contentwidth/2400, native.systemfont, 16) gameovertext: setfillcolor (1, 1, 0) gameovertext.anchorx =. 5 gameovertext.anchory = 5. gruppe: indsæt (gameovertext) newgamebutton = opvisning. newimage ("newgamebutton. men heller ikke dér er menneskene sikre", 264670) gruppe: indsæt (newgamebutton) newgamebutton.isvisible = falske afslutning, som vi gjorde i de foregående to scener, vi giver, gameover, scene blå baggrund.vi må skabe et  , textobject, f.eks. ved at  , newtext,  , display.det, newtext, metode tager et par muligheder, teksten til formålet, sin holdning, og fonden til at bruge.vi giver det en gul farve ved at påberåbe sig  , setfillcolor, passerer i rgb - værdier i procenter.endelig kan vi skabe en knap, og skjule den for øjeblikket.,, 23.  , enterscene, når storyboard fuldt ud har overgået til, gameover, scene, enterscene, metode kaldes.,,, enterscene, fjerner vi den sidste scene fra en skitse.vi bruger den praktiske metode  , scaleto,   fra   overgang bibliotek   skala den  , gameovertext,   med en faktor på, 4.vi tilføjer en  , oncomplete,   til at lytte til den overgang, der ringer,  ,, showbutton,   funktion, når overgangsperioden er afsluttet.endelig har vi tilføje en   tap   begivenhed til at lytte til kampen knap, der påberåber sig, startnewgame,   funktion.,,, funktion scene: enterscene (tilfælde) lokal gruppe = self.view skitse. removescene ("gamelevel") overgang. scaleto (gameovertext, (xscale = 0, yscale = 0, tid = 2000 oncomplete = showbutton}) newgamebutton: addeventlistener ("bank", startnewgame), 24.  , showbutton,,, showbutton, funktion, skjuler, gameovertext,   og viser, newgamebutton,.,,, funktion showbutton() gameovertext.isvisible = falske newgamebutton. isvisible = sandt, 25.  , startnewgame,,, startnewgame, funktion, fortæller den skitse til overgang til, gamelevel, scene.,, funktion startnewgame() skitse. gotoscene ("gamelevel")ende, 26.  , exitscene, er vi nødt til at gøre noget med os, når vi forlader, gameover, scene.vi fjerner hanen begivenhed til at lytte, tilføjede vi tidligere til, newgamebutton,.,, funktion scene: exitscene (tilfælde) lokal gruppe = self.view newgamebutton: removeeventlistener ("bank", startnewgame), af 27.   tilføje scene lyttere, den sidste brik i puslespillet er at tilføje den scene begivenhed lyttere, vi talte om tidligere.for at gøre det, addd følgende kode snippet, gameover. lua,.,, scene: addeventlistener ("createscene", scene) scene: addeventlistener ("enterscene", scene) scene: addeventlistener ("exitscene", scene), konklusioner, vi er nået til afslutningen af denne serie, og nu et fuldt funktionsdygtigt fly sporten.jeg håber, du har fundet disse tutorials nyttige og har lært noget undervejs.tak fordi du læste.,,,

Final product image



Previous:
Next Page:No