Lag en Plane slåssespill i Corona: Gameplay

Create a Plane slåssespill i Corona: Gameplay
9
Del
en
Del

Denne Cyber ​​Monday Envato Tuts + kurs vil bli redusert til bare $ 3. Ikke gå glipp av
Dette innlegget er en del av en serie som heter Opprett en Plane slåssespill i Corona.Create a Plane slåssespill i Corona. InterfaceCreate a Plane slåssespill i Corona: Mer GameplayWhat du skal lage
Innledning

I første del av denne serien, klarte vi å få startskjermen viser og var i stand til å gå over til gamelevel
skjermen. I denne opplæringen, fortsetter vi der vi slapp av og begynne å implementere gameplay.

1. Lokale variabler

Åpne gamelevel.lua
, filen vi skapte i den første opplæringen, og legge til følgende under streken lokale scenen = storyboard.newScene (). Anmeldelser lokal playerSpeedY = 0local playerSpeedX = 0local playerMoveSpeed ​​= 7local playerWidth = 60local playerHeight = 48local bulletWidth = 8local bulletHeight = 19local islandHeight = 81local islandWidth = 100local numberofEnemysToGenerate = 0local numberOfEnemysGenerated = 0local playerBullets = {} - Holder alle kulene spilleren fireslocal enemyBullets = { } - Hold kulene fra "alle" fiende planeslocal øyer = {} - Holder alle islandslocal planeGrid = {} - Holder 0 eller 1 (11 av dem for å gjøre et rutenett system) lokale enemyPlanes = {} - Holder alle av fienden planeslocal livesImages = {} - Holder alle de "frie liv" imageslocal numberOfLives = 3local freeLifes = {} - innehar alle ingame gratis liveslocal playerIsInvincible = falselocal GAME = falselocal numberOfTicks = 0 - Et tall som er økes hver ramme av gamelocal islandGroup - En gruppe for å holde alle øyene lokale planeGroup - En gruppe som holder alle flyene, kuler, etclocal playerlocal planeSoundChannel - SoundChannel for flyet soundlocal firePlayerBulletTimerlocal generateIslandTimerlocal fireEnemyBulletsTimerlocal generateFreeLifeTimerlocal rectUp - Den " up "kontroll på DPADlocal rectDown - Den" down "kontroll på DPADlocal rectLeft - Den" left "kontroll på DPADlocal rectRight - Den" riktige "kontroll på DPAD

De fleste av disse er selvforklarende, men jeg har tatt med kommentarer til avklaring. Herfra ut, bør alle kode settes inn over linjen retur scene.

2. createScene

Start med å legge til createScene funksjonen til main.lua
. Den createScene funksjonen kalles når scenen syn ennå ikke eksisterer. Vi vil legge til spillets visningsobjekter i denne funksjonen
funksjonen scene. CreateScene (hendelse) lokal gruppe = self.viewendscene: addEventListener ("createScene", scene)
3. setupBackground
funksjon setupBackground () lokal bakgrunn = display.newRect (0, 0, display.contentWidth, display.contentHeight) bakgrunn: setFillColor (0,0,1) scene.view: sett (bakgrunn) end < p> I setupBackground, skaper vi en blå bakgrunn ved hjelp av skjerm objektets newRect metode. Den setFillColor metoden tar RGB-verdier, som prosent. Påberope seg setupBackground funksjon i createScene som vist nedenfor
funksjon scene. CreateScene (hendelse) lokal gruppe = self.view setupBackground () end
4. setupGroups

setupGroups funksjon instantiates de islandGroup og planeGroup grupper, og setter dem inn på scenen syn. Den GroupObject er en spesiell type skjerm objekt der du kan legge til andre visningsobjekter. Det er viktig å først legge til islandGroup til visningen for å sørge for at øyene er under flyene
funksjons setupGroups () islandGroup = display.newGroup () planeGroup = display.newGroup () scene.view. Sett ( islandGroup) scene.view: sett (planeGroup) end

Påkall setupGroups funksjon i createScene som vist nedenfor
funksjon scene. createScene (hendelse) lokal gruppe = self.view setupBackground () setupGroups () end
5. setupDisplay

setupDisplay funksjon trekker en svart firkant nederst på skjermen og innstikk DPAD Hotell og flyet
bilder til visningen.
funksjon setupDisplay () lokal tempRect = display.newRect (0, display.contentHeight-70, display.contentWidth, 124); tempRect: setFillColor (0,0,0); scene.view: Sett (tempRect) lokal logo = display.newImage ("logo.png", display.contentWidth-139, display.contentHeight-70); scene.view: Sett (logo) lokal DPAD = display.newImage ("dpad.png", 10, display.contentHeight - 70) scene.view: Stikk (DPAD) end

Igjen, påberope denne funksjonen i createScene som vist nedenfor
funksjon scene:. createScene (event) lokal gruppe = self.view setupBackground () setupGroups () setupDisplay () end
6. setupPlayer

setupPlayer funksjonen bare legger spilleren bildet til skjermen. Skjerm objekt kommer med to read-only egenskaper, contentWidth og contentHeight, som representerer den opprinnelige bredden og høyden av innholdet i piksler. Disse verdiene standard til skjermbredden og høyde, men kan ha andre verdier hvis du bruker innhold skalering i config.lua. Vi bruker disse egenskapene til å justere spilleren i scenen
funksjon setupPlayer () spiller = display.newImage ("player.png", (display.contentWidth /2) -. (PlayerWidth /2), (display .contentHeight - 70) -playerHeight) player.name = "Player" scene.view: sett (spiller) end

Påkall setupPlayer funksjon i createScene
funksjon scene: createScene (hendelse) lokal gruppe = self.view. setupBackground () setupGroups () setupDisplay () setupPlayer () end
7. setupLivesImages

setupLivesImages funksjonen setter opp seks liv bilder og posisjonerer dem øverst til venstre på skjermen. Vi deretter sette disse bildene inn i livesImages bordet, slik at vi er i stand til å referere dem senere. Til slutt, sørger vi for at bare de tre første bildene er synlige
funksjons setupLivesImages () for i = 1, 6 gjøre lokale tempLifeImage = display.newImage ("life.png", 40 * i -. 20, 10) table.insert (livesImages, tempLifeImage) scene.view: innsats (tempLifeImage) if (i > 3) deretter tempLifeImage.isVisible = false; endendend

setupLivesImages funksjonen er også påberopes createScene funksjon
funksjon scene. createScene (hendelse) lokal gruppe = self.view setupBackground () setupGroups () setupDisplay () setupPlayer () setupLivesImages () end
8. setupDPad

setupDPad funksjonen setter opp de fire rektanglene rectUp, rectDown, rectLeft, og rectRight. Vi posisjonerer nøye dem på toppen av DPAD bildet, konfigurere dem til å ikke være synlig, og sørge for at isHitTestable eiendommen er satt til true.

Hvis du setter visningsobjekter å ikke være synlig, er du i utgangspunktet ikke klarer å samhandle med dem. Men ved å sette isHitTestable eiendom til sann, er denne atferden styres
funksjon setupDPad () rectUp = display.newRect (34, display.contentHeight-70, 23, 23) rectUp. SetFillColor (1,0 , 0) rectUp.id = "opp" rectUp.isVisible = false; rectUp.isHitTestable = true; scene.view: Sett (rectUp) rectDown = display.newRect (34, display.contentHeight-23, 23,23) rectDown: setFillColor (1,0,0) rectDown.id = "ned" rectDown.isVisible = false; rectDown.isHitTestable = true; scene.view: Sett (rectDown) rectLeft = display.newRect (10, display.contentHeight-47,23, 23) rectLeft: setFillColor (1,0,0) rectLeft.id = "left" rectLeft.isVisible = false; rectLeft.isHitTestable = true; scene.view: Sett (rectLeft) rectRight = display.newRect (58, display.contentHeight-47, 23,23) rectRight: setFillColor (1,0,0) rectRight.id = "right" rectRight.isVisible = false; rectRight.isHitTestable = true; scene.view: innsats (rectRight) end

Du har gjettet det. Denne funksjonen er også påberopt i createScene
funksjon scene. CreateScene (event) lokal gruppe = self.view setupBackground () setupGroups () setupDisplay () setupPlayer () setupLivesImages () setupDPad () end
9. resetPlaneGrid

resetPlaneGrid funksjonen tilbakestiller planeGrid bordet og setter elleve nuller. Den planeGrid tabellen imiterer elleve flekker over x-aksen, der en fiende planet kan plasseres. Dette vil være mer fornuftig når vi begynne å generere fiendtlige fly.
Funksjon resetPlaneGrid () planeGrid = {} for i = 1, 11 gjør table.insert (planeGrid, 0) Sluttslutt

Påkall denne funksjonen i createScene.
funksjon scene: createScene (hendelse) lokal gruppe = self.view setupBackground () setupGroups () setupDisplay () setupPlayer () setupLivesImages () setupDPad () resetPlaneGrid () end
10. enterScene

Nå som alle visningsobjekter er på plass, er det på tide å legge hendelsen lyttere, timere, etc. Hvis du husker fra forrige del av denne opplæringen, er enterScene funksjonen et godt sted å sette disse opp . Start med å sette inn følgende kode
funksjon scene. EnterScene (hendelse) lokal gruppe = self.viewendscene: addEventListener ("enterScene", scene)
11. Fjerne Forrige Storyboard

Når vi går inn i denne scenen, trenger vi å fjerne den forrige scenen. Legg til følgende kode i enterScene funksjon for å gjøre dette.
Lokal previousScene = storyboard.getPrevious () storyboard.removeScene (previousScene) Når du skriver inn en ny scene, den forrige scenen du var på kan refereres ved å ringe getPrevious i dreieboken objektet. Vi fjerne det helt fra dreieboken ved å ringe removeScene i dreieboken objektet.

12. Legg tilstelninger Lyttere til DPAD rektangler

Legg til følgende kode under koden du skrev i forrige trinn. Dette kodebiten legger berørings lyttere til hver av rektangler, påkalle movePlane med hvert touch. La oss ta en titt på denne movePlane funksjon i neste trinn
rectUp. AddEventListener ("touch", movePlane) rectDown: addEventListener ("touch", movePlane) rectLeft: addEventListener ("touch", movePlane) rectRight : addEventListener ("touch", movePlane)
13. movePlane

movePlane funksjonen er ansvarlig for å sette flyene hastighet. Vi sjekker om kontakten hendelsens fasen er lik begynte, noe som betyr at spilleren har rørt ned, men ikke løftet fingeren opp igjen. Hvis dette er sant, setter vi fart og retning i henhold til hvilke rektangel ble rørt. Hvis berørings hendelsens fasen er lik ended, så vi vet at spilleren har løftet sin finger, noe som betyr at vi setter hastigheten til 0.
funksjon movePlane (hendelse) hvis event.phase == "begynte" da hvis (event .target.id == "opp") så playerSpeedY = -playerMoveSpeed ​​ende if (event.target.id == "ned") så playerSpeedY = playerMoveSpeed ​​ende if (event.target.id == "venstre") så playerSpeedX = -playerMoveSpeed ​​ende if (event.target.id == "riktig") så playerSpeedX = playerMoveSpeed ​​ende ElseIf event.phase == "endte" da playerSpeedX = 0 playerSpeedY = 0 Sluttslutt
14. PlaneSound

La oss legge litt lyd i spillet vårt. Legg inn følgende kode til enterScene funksjonen. Den laster og skuespill planesound.mp3
. Ved å sette sløyfer eiendom til -1, lyden vil sløyfe for alltid. Hvis du ønsker å lære mer om lyd i Corona, bør du sjekke ut dokumentasjonen
lokal planeSound = audio.loadStream ("planesound.mp3") planeSoundChannel = audio.play (planeSound, {sløyfer =. - 1})
15. enterframe Hendelses

Vi legger også til en runtime hendelse lytteren heter enterframe som vil ringe
gameLoop funksjon. Hvor ofte skjer det enterframe hendelsen avhenger av rammer per sekund (FPS) verdi du setter i config.lua
. I vårt eksempel vil det bli kalt 30 ganger per sekund. Legg denne hendelsen lytteren i enterScene funksjon
Spilletid:. AddEventListener ("enterframe", gameLoop)
16. gameLoop

I gameLoop funksjonen oppdaterer vi sprite stillinger og utføre noen annen logikk som må finne sted hver ramme. Hvis du er interessert i å lese mer om temaet spill loops, skrev Michael James Williams en stor artikkel som forklarer hvordan et vanlig spill løkke fungerer. Legg inn følgende kode.
Funksjon gameLoop () movePlayer () end
17. movePlayer

movePlayer funksjonen styrer bevegelse av spillerens flyet. Vi beveger flyet i henhold til playerSpeedX og playerSpeedY verdier, som vil enten være 0 eller 7, avhengig av om spilleren er i berøring på DPAD eller ikke. Se tilbake til movePlane funksjonen hvis dette er uklart. Vi også gjøre noen grensekontroll, noe som gjør at flyet kan ikke flytte off-screen
funksjon movePlayer () player.x = player.x + playerSpeedX player.y = player.y + playerSpeedY if (player.x. ≪ 0 ) så player.x = 0 end if (player.x > display.contentWidth - playerWidth) da player.x = display.contentWidth - playerWidth ende if (player.y < 0) deretter player.y = 0 end if ( player.y > display.contentHeight - 70- playerHeight) så player.y = display.contentHeight - 70 - playerHeight Sluttslutt

Hvis du teste spillet nå, bør du være i stand til å navigere flyet rundt på skjermen ved hjelp av DPAD .

Konklusjon

Dette bringer den andre tutorial av denne serien til en avslutning. I neste utgaven av denne serien, vil vi fortsette med spillingen. Takk for lesing og se deg der. Anmeldelser