Lag et Rapid Roll -spill i Flash

Ta en titt gjennom denne Premium Tutorial og lage et underholdende fallende plattformspill med Flash og ActionScript 3.0. Ikke slå de lilla plattformene eller flytte utenfor skjermen, eller du vil miste livet!


Trinn 1: Kort oversikt

Ved hjelp av Flash-tegneverktøyene oppretter vi et flott grafisk grensesnitt som vil bli drevet av flere ActionScript 3-klasser.

Brukeren vil kunne flytte et tegn over scenen og plattformene, du kan endre parametrene i klassen for å tilpasse spillet.


Trinn 2: Flash-dokumentinnstillinger

Åpne Flash og opprett et 320 piksler bredt 480 piksler høyt dokument. Still inn rammefrekvensen til 24fps.



Trinn 3: Grensesnitt


Et fargerikt fint utseende grensesnitt vil bli vist, dette innebærer flere former, knapper, lyder og mer.

Fortsett til de neste trinnene for å lære hvordan du oppretter denne GUI.


Trinn 4: Bakgrunn


Velg Rectangle Tool (R) for å lage et 320x480px # DEBDA0 rektangel og senter det i scenen. Dupliser forrige form og endre bredden til 2px og fargen sin til # C3A287, dupliser formen (Cmd + D) flere ganger og flytt hver 2px til høyre for å få resultatet vist ovenfor.


Trinn 5: Menyskjerm


Velg tekstverktøyet (T), velg en skikkelig skrifttype, og skriv spilltittelen din. Jeg brukte dette formatet: Candara Bold, 80pt, # 746253. Du kan også legge til spilleren og plattformgrafikkene som vi skal skape i de neste trinnene.

Bruk samme teknikk for å lage to knapper, justere dem til midten og nevne dem startB og creditsB. Konverter alt til en Filmklipp og angi navnet på forekomsten til menuView.


Trinn 6: Resultat og liv


Dette vil være GameView. Legg til bakgrunnen MC til scenen og skape to Dynamic TextFields og legg dem som vist på bildet. Du kan også legge til noen enkle former bak Tekstfelt for å gjøre teksten klarere.


Trinn 7: Spiller


Bruke Rektangulært primitive verktøy (R) for å lage en 30x30px firkant og fyll den med # CC6600. Dupliser formen, endre størrelsen til 28x28px og bruk denne gradientfyllingen: # F9D03 til # EA7736. Du kan legge til et ikon eller et brev for å identifisere karakteren din, jeg har brukt en fra ActiveTuts + -logoen.

Til slutt velger du den nederste delen av formen (som vist på bildet) konvertere den til Filmklipp og nev det hArea, Dette vil være veldig nyttig for å unngå uønskede kollisjoner med blokkene. Velg alle figurene og konverter dem til en enkelt MC; navngi det Spiller og merk av Eksporter for ActionScript eske.


Trinn 8: Blokker


Bruk samme teknikk som ble brukt i det siste trinnet for å lage to 60x14px blokker, konverter dem til MC, navnet på den grå Blokkere og den lilla en BadBlock. Ikke glem å merke Eksporter for ActionScript eske.


Trinn 9: Alert


Et varsel vil bli vist når du mister alle dine liv, det vil vise sluttresultatet du nådde. Bruke Rektangulært primitive verktøy å lage den og legge til filteret som vises i bildet for et bedre utseende. Angi navnet på forekomsten til AlertView og merk av Eksporter for ActionScript eske.


Trinn 10: Kreditter


Denne skjermen blir enkel å lage som vi allerede har all grafikk. Angi navnet på forekomsten til CreditsView og merk av Eksporter for ActionScript eske.


Trinn 11: Tween Nano


Vi bruker en annen tween-motor fra standard som er inkludert i Flash, dette vil øke ytelsen, så vel som å være enklere å bruke.

Du kan laste ned Tween Nano fra sitt offisielle nettsted. For informasjon om hvordan du installerer den, les denne opplæringen.


Trinn 12: Soungle


Vi bruker lydeffekter for å forbedre følelsen av spillet (i dette tilfellet for å la spilleren vite når de har mistet livet), kan du finne lyden som brukes i dette eksemplet på Soungle.com ved hjelp av søkeordet blip. Lagre lyden i biblioteket ditt med et klassenavn på blip.


Trinn 13: Opprett en ny ActionScript-klasse


Opprett en ny (Cmd + N) ActionScript 3.0-klasse og lagre den som Main.as i klassemappen din.


Trinn 14: Klassestruktur

Lag din grunnklassestruktur for å begynne å skrive koden din.

 pakke import flash.display.Sprite; offentlig klasse Hoved utvider Sprite offentlig funksjon Main (): void // constructor code

Trinn 15: Påkrevde klasser

Dette er klassene vi må importere for vår klasse for å jobbe, importere Direktivet gir eksternt definerte klasser og pakker tilgjengelig for koden din.

 importer flash.display.Sprite; importere flash.events.Event; importer flash.events.KeyboardEvent; importer flash.events.TimerEvent; importere flash.utils.Timer; importer flash.events.MouseEvent; importer flash.net.navigateToURL; importere flash.net.URLRequest; importer com.greensock.TweenNano; importere com.greensock.easing.Elastic;

Trinn 16: Variabler

Dette er variablene vi skal bruke, les kommentarene i koden for å få vite mer om dem, noen av navnene deres er selvklart, så det blir ingen kommentar der.

 private var blokker: Vector. = Ny Vector.(); // En vektor for å lagre de bevegelige blokkene privat var spiller: Spiller = Ny spiller (); privat var tyngdekraften: int = 3; // Tyngdekraften var brukt til å flytte spilleren og blokkerer private var moveLeft: Boolean = false; // lagre spillerens retning privat var moveRight: Boolean = false; privat var blockTimer: Timer = ny Timer (800); // tid til å vente før en ny blokk blir generert privat var liv: Liv; private var liv: int = 3; privat var lifeTimer: Timer = ny Timer (8000); // tid til å vente før et nytt liv blir vist privat var blip: Blip = new Blip (); // En lyd forekomst

Trinn 17: Konstruktør

Konstruktøren er en funksjon som kjører når et objekt er opprettet fra en klasse, denne koden er den første som skal utføres når du lager en forekomst av et objekt, eller den første som kjører når prosjektet har lastet inn hvis det er i dokumentklassen.

Det kaller de nødvendige funksjonene for å starte spillet. Kontroller disse funksjonene i de neste trinnene.

 offentlig sluttfunksjon Main (): void initialListeners ('add'); 

Trinn 18: Innledende lyttere

Vi starter med å legge til muselyttene til knappene i menyvisningen, og disse tar oss til spillskjermbildet eller kredittkortet.

 private endelig funksjon initialListeners (handling: String = 'add'): void if (action == 'add') menuView.startB.addEventListener (MouseEvent.MOUSE_UP, gameView); menuView.creditsB.addEventListener (MouseEvent.MOUSE_UP, showCreditsView); 

Trinn 19: Spillvisning

Når Start knappen er trykket, fokuset er satt til scenen for å motta tastaturhandlingene for å flytte spilleren, så blir menyvisningen tweened og fjernet.

 privat endelige funksjonsspillView (e: MouseEvent): void / * Focus Stage * / stage.focus = scene; / * Fjern MenuView, Start Game * / TweenNano.to (menyView, 0.5, y: -menuView.height, onComplete: funksjon (): void removeChild (menyView); menuView = null; addInitialBlocks ();); 

Trinn 20: Vis kreditt

Kredittskjermbildet vises når brukeren klikker på knappen Kreditt, en muselytter er lagt til hele MC for å fjerne den.

 privat siste funksjonshowCreditsView (e: MouseEvent): void var credits: CreditsView = new CreditsView (); addChild (sp); TweenNano.from (credits, 0.4, x: stage.stageWidth); credits.addEventListener (MouseEvent.MOUSE_UP, funksjon (): void TweenNano.to (credits, 0.4, x: stage.stageWidth, onComplete: funksjon (): void removeChild (credits); credits = null;); ); 

Trinn 21: Opprett innledende blokker

Følgende kode legger blokkene angitt i parameteren i tilfeldig posisjon, det vil også ringe til funksjonen for å legge spilleren til scenen.

 privat endelig funksjon addInitialBlocks (n: int = 3): void for (var i: int = 0; i < n; i++)  var block:Block = new Block(); block.x = Math.random() * (stage.stageWidth - block.width); block.y = (stage.stageHeight * 0.5) + Math.random() * (stage.stageHeight * 0.5); addChild(block); blocks.push(block);  addPlayer(); 

Trinn 22: Legg til spiller

Spilleren vil bli lagt til når de første blokkene er på scenen. Det vil dukke opp i midten av scenen.

 privat endelig funksjon addPlayer (): void player.x = (stage.stageWidth * 0.5) - (player.width * 0.5); player.y = player.height; addChild (spiller); gameListeners (); 

Trinn 23: Flytt spiller

Følgende kode vil sette den riktige bevegelsesvariabelen til sann eller falsk avhengig av hvilken tast som ble trykket, så vil variabelen bli sjekket hver ramme (i en annen funksjon). Dette gjør at spilleren beveger seg i henhold til den variabelen.

 privat endelig funksjon movePlayer (e: KeyboardEvent): void if (e.keyCode == 37) moveRight = false; moveLeft = true;  annet hvis (e.keyCode == 39) moveLeft = false; moveRight = true; 

Trinn 24: Stopp spilleren

Når piltastene slippes, er den riktige variabelen satt til falsk å stoppe bevegelsen.

 privat endelige funksjonstopperen (e: KeyboardEvent): void if (e.keyCode == 37) moveLeft = false;  annet hvis (e.keyCode == 39) moveRight = false; 

Trinn 25: Legg til blokker

Denne funksjonen kalles av en Timer; det vil beregne et tilfeldig heltall fra 0 til 3, når resultatet er 0, vil en dårlig blokk bli lagt til, hvis resultatet er forskjellig fra 0, vil en normal blokk bli lagt til. Blokkene legges til en Vector-egenskap som kalles blokker, På den måten kan vi få tilgang til dem utenfor denne funksjonen.

 privat endelig funksjon addBlock (e: TimerEvent): void var r: int = Math.floor (Math.random () * 4); hvis (r! = 0) var blokk: Blokk = ny blokk (); block.x = Math.random () * (scene.stageWidth - block.width); block.y = stage.stageHeight + block.height; addChild (blokk); blocks.push (blokk);  annet var dårligBlock: BadBlock = ny BadBlock (); badBlock.name = 'dårlig'; badBlock.x = Math.random () * (stage.stageWidth - badBlock.width); badBlock.y = stage.stageHeight + badBlock.height; addChild (badBlock); blocks.push (badBlock); 

Trinn 26: Legg til liv

En annen tidsbestemt funksjon, et liv grafikk vil bli lagt til når timeren er fullført. Livsposisjonen vil være den siste blokken i vektoren - 1.

 privat endelig funksjon addLife (e: TimerEvent): void life = new Life (); life.x = blokker [blocks.length - 1] .x; life.y = blokkerer [blocks.length - 1] .y - life.height; addChild (liv); 

Trinn 27: Spillelyttere

Denne funksjonen legger til og fjerner de nødvendige lytterne for å starte spillet.

 private endelige funksjon spilllistere (handling: String = 'add'): void if (action == 'add') stage.addEventListener (KeyboardEvent.KEY_DOWN, movePlayer); stage.addEventListener (KeyboardEvent.KEY_UP, stopPlayer); stage.addEventListener (Event.ENTER_FRAME, oppdatering); blockTimer.addEventListener (TimerEvent.TIMER, addBlock); blockTimer.start (); lifeTimer.addEventListener (TimerEvent.TIMER, addLife); lifeTimer.start ();  else stage.removeEventListener (KeyboardEvent.KEY_DOWN, movePlayer); stage.removeEventListener (KeyboardEvent.KEY_UP, stopPlayer); stage.removeEventListener (Event.ENTER_FRAME, oppdatering); blockTimer.removeEventListener (TimerEvent.TIMER, addBlock); blockTimer.stop (); lifeTimer.removeEventListener (TimerEvent.TIMER, addLife); lifeTimer.stop (); 

Trinn 28: Animer liv

Når spilleren taper et liv, vil en liten animasjon bli vist i livs tekstfeltet, og en lyd vil bli spilt for å advare brukeren.

 privat endelig funksjon animateLives (): void TweenNano.from (livesTF, 0.8, x: livesTF.x - 3, ease: Elastic.easeOut); blip.play (); 

Trinn 29: Kontroller

I denne delen starter vi hovedfunksjonen til spillet, denne funksjonen blir utført hver ramme.

De neste kodelinjene kontrollerer bevegelsesvariablene, hvis det er sant, vil spilleren bli flyttet.

 privat endelig funksjon oppdatering (e: Event): void / * Kontroller * / hvis (moveLeft) player.x - = 4;  annet hvis (moveRight) player.x + = 4; 

Trinn 30: Skjermgrenser

Denne koden skaper usynlige vegger på scenens sider for å forhindre at spilleren går ut av det.

 / * Skjermgrenser * / hvis (player.x <= 0) //Left  player.x = 0;  else if(player.x >= (scene.stageWidth - player.width)) / Høyre player.x = (stage.stageWidth - player.width); 

Trinn 31: Spillerens tyngdekraft

Spilleren skyves ned av gravitasjonsvariabelen.

 / * Spiller Gravity * / player.y + = tyngdekraften;

Trinn 32: Blokker kollisjoner

De neste linjene kontrollerer for kollisjoner mellom spilleren og blokkene. Når spilleren kolliderer med en normal blokk, forblir den på toppen av den. Når en dårlig blokk blir truffet, går et liv tapt og spilleren flyttes.

 for (var jeg: int = 0; i < blocks.length; i++)  if(player.hArea.hitTestObject(blocks[i]) && blocks[i].name == 'bad')  for(var j:int = 3; j < blocks.length; j++)  if(blocks[j].name != 'bad')  player.x = blocks[j].x; player.y = blocks[j].y - player.height; lives--; animateLives(); livesTF.text = 'x' + String(lives); j = blocks.length;    if(player.hArea.hitTestObject(blocks[i]))  player.y = blocks[i].y - (player.height + 3); 

Trinn 33: Blokkerer tyngdekraften

Gravity påvirker blokkene også, men i motsatt retning.

 blokkerer [i] .y - = tyngdekraften;

Trinn 34: Fjern avstengningsblokker

Blokkene blir ødelagt når de ikke lenger er synlige på scenen.

 if (blokkene [i] .Y < -blocks[i].height)  removeChild(blocks[i]); blocks[i] = null; blocks.splice(i, 1); 

Trinn 35: Resultat

Spillresultatet øker hver ramme, denne koden endrer tekstfeltet for å gjenspeile det.

 scoreTF.text = String (int (scoreTF.text) + 1);

Trinn 36: Bor

Følgende linjer håndterer livsgrafikk og variabler.

Hvis et liv (en 1-opp) er på scenen, vil det bli flyttet oppover og fjernet hvis det blir truffet av spilleren eller ikke lenger synlig på scenen.

 hvis (liv! = null) life.y - = gravity; / * Fjern + Liv * / hvis (life.y < 0)  removeChild(life); life = null;   /* Grab +Life */ if(life != null && player.hitTestObject(life))  removeChild(life); life = null; lives++; livesTF.text = 'x' + String(lives);  /* Lose Lives */ if(player.y > stage.stageHeight || player.y < -5)  player.x = blocks[3].x; player.y = blocks[3].y - player.height; lives--; animateLives() livesTF.text = 'x' + String(lives); 

Trinn 37: Spill over

Når spilleren er ute av livet, vil den showAlert () funksjon kalles. Denne funksjonen stopper spillet og avslører sluttresultatet.

 if (liv < 0)  showAlert(); 

Trinn 38: Nivåer

Du kan legge til så mange nivåer som du vil, dette er et eksempel på hvordan du kan legge til et nivå.

Når poengsummen nådde 500, øker tyngdekraften med 1, dette vil gjøre spillet bevege seg raskere og vanskeligere å lande på plattformene, det reduserer også tiden livet blir lagt til.

 hvis (int (scoreTF.text)> 500 && int (scoreTF.text) < 502)  gravity = 4; lifeTimer = new Timer(12000); 

Prøv å øke hastigheten etter hvert 500 poeng.


Trinn 39: Alert

Denne funksjonen stopper spillet og avslører sluttresultatet, det legger også til en muselytter for å tilbakestille spillet når det klikkes.

 privat siste funksjonshowAlert (): void gameListeners ('rmv'); var varsel: AlertView = ny AlertView (); alert.x = scene.stageWidth * 0,5; alert.y = scene.stageHeight * 0,5; alert.scoreTF.text = scoreTF.text + '!'; livesTF.text = "; alert.addEventListener (MouseEvent.MOUSE_UP, start på nytt); addChild (alert); TweenNano.from (varsel, 0,7, y: -alert.height, ease: Elastic.easeOut);

Trinn 40: Start på nytt

Den neste funksjonen vil laste SWF, tilbakestille alle variabler og metoder og returnere til Menyskjerm.

 privat endelig funksjonstart (e: MouseEvent): void navigateToURL (ny URLRequest (stage.loaderInfo.url), '_level0'); 

Trinn 41: Sett hovedklasse


Legg klassenavnet til Klasse felt i publisere delen av Eiendommer panel for å knytte FLA til hoveddokumentklassen.


Konklusjon

Du har laget et veldig underholdende spill, prøv å legge til dine egne funksjoner og grafikk.

Jeg håper du likte denne opplæringen, takk for å lese!