Creați un joc Rapid Roll în Flash

Aruncați o privire prin acest Premium Tutorial și creați un joc distractiv care se încadrează în platforme folosind Flash și ActionScript 3.0. Nu loviți platformele purpurii sau nu vă mutați în afara ecranului, sau veți pierde o viață!


Pasul 1: Prezentare succintă

Folosind instrumentele de desen Flash vom crea o interfață grafică foarte bună, care va fi alimentată de mai multe clase ActionScript 3.

Utilizatorul va putea să deplaseze un personaj pe scenă și pe platforme, puteți modifica parametrii din clasă pentru a personaliza jocul.


Pasul 2: Setări Flash Document

Deschideți Flash și creați un document de 320 pixeli lățime, 480 pixeli înălțime. Setați rata cadrelor la 24fps.



Pasul 3: Interfața


Va fi afișată o interfață cu aspect frumos, care implică mai multe forme, butoane, sunete și multe altele.

Continuați cu pașii următori pentru a afla cum să creați această interfață grafică.


Pasul 4: Contextul


Selectați instrumentul Rectangle (R) pentru a crea un dreptunghi de 320x480px # DEBDA0 și a centra în etapă. Duplicați forma anterioară și schimbați lățimea la 2px și culoarea sa la # C3A287, duplicați forma (Cmd + D) de mai multe ori și mutați fiecare 2px spre dreapta pentru a obține rezultatul afișat mai sus.


Pasul 5: ecranul meniului


Selectați Instrumentul Text (T), alegeți un font bun și scrieți titlul jocului. Am folosit acest format: Candara Bold, 80pt, # 746253. De asemenea, puteți adăuga grafica platformei player și platformă pe care o vom crea în pașii următori.

Utilizați aceeași tehnică pentru a crea două butoane, aliniați-le spre centru și denumiți-le startB și creditsB. Conversia tuturor la a MovieClip și setați numele instanței acestuia menuView.


Pasul 6: Scor și trăiesc


Acesta va fi GameView. Adăugați fundalul MC la scena și a crea două Suprafețele dinamice de text și plasați-le așa cum se arată în imagine. De asemenea, puteți adăuga câteva forme simple în spatele Câmpuri de text pentru a face textul mai clar.


Pasul 7: Jucătorul


Folosește Rectangle Primitive Tool (R) pentru a crea un pătrat de 30x30px și completați-l cu # CC6600. Duplicați forma, modificați dimensiunea acesteia la 28x28px și utilizați această umplutură de gradient: # F9D03 la # EA7736. Puteți adăuga o pictogramă sau o literă pentru a identifica caracterul dvs., am folosit A din sigla ActiveTuts +.

În cele din urmă, selectați partea de jos a formei (după cum se arată în imagine) pentru ao converti MovieClip și numește-o Harea, acest lucru va fi foarte util pentru evitarea coliziunilor nedorite cu blocurile. Selectați toate formele și convertiți-le într-un singur MC; numeste Jucător și marchează Exportați pentru ActionScript cutie.


Pasul 8: Blochează


Utilizați aceeași tehnică utilizată în ultimul pas pentru a crea două blocuri de 60x14px, convertiți-le în MC, denumiți cea gri bloc și purpuriu BadBlock. Nu uitați să marcați Exportați pentru ActionScript cutie.


Pasul 9: Alertă


O alertă va apărea atunci când vă veți pierde toată viața, va afișa scorul final la care ați ajuns. Folosește Rectangle Primitive Tool pentru ao crea și a adăuga filtrul afișat în imagine pentru o imagine mai bună. Setați numele de instanță la AlertView și marchează Exportați pentru ActionScript cutie.


Pasul 10: Credite


Acest ecran va fi ușor de făcut, deoarece avem deja toate grafica. Setați numele de instanță la CreditsView și marchează Exportați pentru ActionScript cutie.


Pasul 11: Tween Nano


Vom folosi un motor tween diferit de cel implicit inclus în Flash, ceea ce va crește performanța și va fi mai ușor de utilizat.

Puteți descărca Tween Nano de pe site-ul său oficial. Pentru informații despre instalarea acestuia, citiți acest tutorial.


Pasul 12: Soungle


Vom folosi Sound Effects pentru a îmbunătăți sentimentul jocului (în acest caz, pentru a lăsa jucătorul să știe când au pierdut o viață), puteți găsi sunetul folosit în acest exemplu pe Soungle.com folosind cuvântul cheie blip. Salvați sunetul din biblioteca cu un nume de clasă blip.


Pasul 13: Creați o nouă clasă ActionScript


Creați o nouă clasă ActionScript 3.0 (Cmd + N) și salvați-o ca Main.as în dosarul dvs. de clasă.


Pasul 14: Structura clasei

Creați structura claselor de bază pentru a începe să scrieți codul.

 pachet import flash.display.Sprite; clasa publică principală extinde Sprite funcția publică Main (): void // code constructor

Pasul 15: Clasele necesare

Acestea sunt clasele pe care trebuie să le importăm pentru ca clasa noastră să funcționeze import directiva face ca clasele și pachetele definite extern să fie disponibile pentru codul dvs..

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

Pasul 16: Variabile

Acestea sunt variabilele pe care le vom folosi, citiți comentariile din cod pentru a afla mai multe despre ele, unele dintre ele sunt explicate de sine, astfel încât nu va fi nici un comentariu acolo.

 blocuri private var: Vector. = Vector nou.(); // Un vector pentru stocarea blocurilor în mișcare private var player: Player = player nou (); gravitatea privată var: int = 3; // Valoarea gravitațională folosită pentru a muta jucătorul și blochează privatul var moveLeft: Boolean = false; // stochează direcția jucătorului private var moveRight: Boolean = false; privat var blocTimer: Timer = nou Cronometru (800); // timpul pentru a aștepta înainte ca un nou bloc să fie generat privat var life: Life; var privat: int = 3; privat var lifeTimer: Timer = nou Cronometru (8000); // timpul să aștepți înainte de a se arăta o nouă viață privată var Blip: Blip = Blip nou (); // Un exemplu de sunet

Pasul 17: Constructorul

Constructorul este o funcție care rulează atunci când un obiect este creat dintr-o clasă, acest cod este primul care se execută atunci când faceți o instanță a unui obiect sau primul care se execută când proiectul este încărcat dacă acesta se află în clasa Document.

Se numește funcțiile necesare pentru a începe jocul. Verificați aceste funcții în pașii următori.

 funcția publică finală Principal (): void initialListeners ('add'); 

Pasul 18: Ascultători inițiali

Vom începe prin adăugarea ascultătorilor mouse-ului la butoanele din meniul de vizualizare, acestea ne vor duce pe ecranul jocului sau pe ecranul creditelor.

 funcția finală privată finală (acțiunea: String = 'add'): void if (action == 'add') menuView.startB.addEventListener (MouseEvent.MOUSE_UP, gameView); menuView.creditsB.addEventListener (MouseEvent.MOUSE_UP, showCreditsView); 

Pasul 19: Vizualizarea jocului

Cand start butonul este apăsat, focalizarea este setată la etapă pentru a primi acțiunile tastaturii pentru a muta playerul, apoi vizualizarea meniului este completă și eliminată.

 funcția finală privată finală gameView (e: MouseEvent): void / * Focus Stage * / stage.focus = stage; / * Eliminați MenuView, Start Game * / TweenNano.to (meniuView, 0.5, y: -menuView.height, onComplete: function (): void removeChild (menuView); 

Pasul 20: Afișați creditele

Ecranul creditelor este afișat când utilizatorul face clic pe butonul Credite, iar un asistent de mouse este adăugat la MC complet pentru al elimina.

 funcția finală privată showCreditsView (e: MouseEvent): void var credite: CreditsView = new CreditsView (); addChild (credite); TweenNano.from (credite, 0,4, x: stage.stageWidth); credits.addEventListener (MouseEvent.MOUSE_UP, function (): void TweenNano.to (credite, 0.4, x: stage.stageWidth, onComplete: function (): void removeChild; ); 

Pasul 21: Creați blocuri inițiale

Următorul cod adaugă blocurile specificate în parametru într-o poziție aleatorie, de asemenea va apela funcția de adăugare a playerului în scenă.

 funcția finală privată addInitialBlocks (n: int = 3): void pentru (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(); 

Pasul 22: Adăugați un Player

Playerul va fi adăugat atunci când blocurile inițiale sunt pe scenă. Va apărea în centrul X al scenei.

 funcția finală privată addPlayer (): void player.x = (stage.stageWidth * 0.5) - (player.width * 0.5); player.y = player.height; addChild (jucator); gameListeners (); 

Pasul 23: mutați jucătorul

Următorul cod va stabili valoarea valorii variabilei potrivite la true sau false în funcție de tasta care este apăsată, apoi variabila va fi verificată la fiecare cadru (într-o altă funcție). Acest lucru va face ca jucătorul să se deplaseze în funcție de variabila respectivă.

 funcția finală privată movePlayer (e: KeyboardEvent): void if (e.keyCode == 37) moveRight = false; moveLeft = true;  altceva dacă (e.keyCode == 39) moveLeft = false; moveRight = adevărat; 

Pasul 24: Opriți Playerul

Când sunt eliberate tastele săgeți, variabila corespunzătoare este setată la fals să oprească mișcarea.

 funcția finală privată finală stopPlayer (e: KeyboardEvent): void if (e.keyCode == 37) moveLeft = false;  altceva dacă (e.keyCode == 39) moveRight = false; 

Pasul 25: Adăugați blocuri

Această funcție este apelată de un cronometru; se va calcula un întreg aleator de la 0 la 3, atunci când rezultatul este egal cu 0, se va adăuga un bloc rău, dacă rezultatul este diferit de 0, se va adăuga un bloc normal. Blocurile sunt adăugate la o proprietate Vector numită blocuri, în acest fel, le putem accesa în afara acestei funcții.

 funcția finală privată addBlock (e: TimerEvent): void var r: int = Math.floor (Math.random () * 4); dacă (r! = 0) var bloc: bloc = bloc nou (); block.x = Math.random () * (stadiu.stageWidth - bloc.width); block.y = stage.stageHeight + block.height; addChild (bloc); blocks.push (bloc);  altceva var badBlock: BadBlock = BadBlock nou (); badBlock.name = 'rău'; badBlock.x = Math.random () * (stadiu.stageWidth - badBlock.width); badBlock.y = stage.stageHeight + badBlock.height; addChild (badBlock); blocks.push (badBlock); 

Pasul 26: Adăugați viață

O altă funcție temporizată, o grafică de viață va fi adăugată atunci când cronometrul este complet. Poziția de viață va fi ultimul bloc al vectorului - 1.

 funcția finală privată addLife (e: TimerEvent): void life = new Life (); life.x = blocuri [blocks.length - 1] .x; life.y = blocuri [blocks.length - 1] .y - life.height; addChild (viață); 

Pasul 27: ascultători de jocuri

Această funcție adaugă și elimină ascultătorii necesari pentru a începe jocul.

 funcția finală privată de jocListeners (acțiune: String = 'add'): void if (action == 'add') stage.addEventListener (KeyboardEvent.KEY_DOWN, movePlayer); stage.addEventListener (tastaturăEvent.KEY_UP, stopPlayer); stage.addEventListener (Event.ENTER_FRAME, actualizare); blockTimer.addEventListener (TimerEvent.TIMER, addBlock); blockTimer.start (); lifeTimer.addEventListener (TimerEvent.TIMER, addLife); lifeTimer.start ();  altceva stage.removeEventListener (KeyboardEvent.KEY_DOWN, movePlayer); stage.removeEventListener (tastaturăEvent.KEY_UP, stopPlayer); stage.removeEventListener (Event.ENTER_FRAME, actualizare); blockTimer.removeEventListener (TimerEvent.TIMER, addBlock); blockTimer.stop (); lifeTimer.removeEventListener (TimerEvent.TIMER, addLife); lifeTimer.stop (); 

Pasul 28: Animați-vă viața

Când jucătorul își pierde viața, o animație mică va fi afișată în câmpul text de viață și va fi redat un sunet pentru a avertiza utilizatorul.

 funcția finală privată animateLives (): void TweenNano.from (livesTF, 0.8, x: livesTF.x - 3, ușurință: Elastic.easeOut); blip.play (); 

Pasul 29: Controale

În această parte vom începe funcția principală a jocului, această funcție va fi executată în fiecare cadru.

Următoarele linii de cod verifică variabilele de mișcare, dacă este adevărat, jucătorul va fi mutat.

 actualizarea funcției finale private (e: Event): void / * Controls * / if (moveLeft) player.x - = 4;  altfel dacă (moveRight) player.x + = 4; 

Pasul 30: Limitele ecranului

Acest cod creează pereți invizibili pe părțile laterale ale scenei pentru a împiedica jucătorul să iasă din el.

 / * Boundaries ecran * / if (player.x <= 0) //Left  player.x = 0;  else if(player.x >= (stadium.stageWidth - player.width)) // Dreapta player.x = (stage.stageWidth - player.width); 

Pasul 31: Gravitatea jucătorului

Jucătorul este împins de variabila gravitațională.

 / * Jucătorul Gravity * / player.y + = gravitatea;

Pasul 32: Blocarea coliziunilor

Următoarele linii verifică coliziunile dintre player și blocuri. Când jucătorul se ciocnește cu un bloc obișnuit, acesta rămâne pe partea de sus a acestuia. Când un bloc rău este lovit, o viață se pierde și jucătorul este mutat.

 pentru (var i: 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); 

Pasul 33: Blochează gravitatea

Gravitatea afectează și blocurile, dar în direcția opusă.

 blochează [i] .y - = gravitatea;

Pasul 34: Eliminați blocurile din afara etapei

Blocurile sunt distruse atunci când nu mai sunt vizibile pe scenă.

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

Pasul 35: Scor

Scorul jocului ridică fiecare cadru, acest cod schimbă câmpul de text pentru a reflecta acest lucru.

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

Pasul 36: Locuiește

Următoarele linii se ocupă de graficul de viață și variabilele.

Dacă o viață (a 1-Up) se află pe scenă, va fi mutată în sus și va fi eliminată dacă este lovită de jucător sau nu mai este vizibilă pe scenă.

 dacă (viață! = nulă) life.y - = gravitate; / * Remove + Life * / dacă (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); 

Pasul 37: Jocul se termină

Când jucătorul nu mai are viață, showAlert () se numește funcția. Această funcție va opri jocul și va arăta scorul final.

 dacă (vieți < 0)  showAlert(); 

Pasul 38: Nivele

Puteți adăuga cât mai multe niveluri pe care le doriți, acesta este un exemplu de cum puteți adăuga un nivel.

Când scorul a ajuns la 500, gravitatea crește cu 1, acest lucru va face jocul să se deplaseze mai repede și mai greu pentru a ateriza pe platforme, de asemenea, reduce timpul în care sunt adăugate vieți.

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

Încercați să faceți creșterea vitezei după fiecare 500 de puncte.


Pasul 39: Alertă

Această funcție va opri jocul și va arăta scorul final, de asemenea, adaugă un ascultător de mouse pentru a reseta jocul când a fost făcut clic.

 funcția finală privată showAlert (): void gameListeners ('rmv'); var alert: AlertView = nou AlertView (); alert.x = stage.stageWidth * 0.5; alert.y = stage.stageHeight * 0.5; alert.scoreTF.text = scorTF.text + '!'; (de exemplu, e-mail: e-mail.google.com);

Pasul 40: Reporniți

Următoarea funcție va reîncărca SWF-ul, resetând toate variabilele și metodele și revenind la Ecran meniu.

 reinițializare finală a funcției finale (e: MouseEvent): void navigateToURL (nou URLRequest (stage.loaderInfo.url), '_level0'); 

Pasul 41: Setați clasa principală


Adăugați numele clasei la Clasă domeniu în Publica secțiunea din Proprietăți pentru a asocia FLA cu clasa de documente principale.


Concluzie

Ați creat un joc foarte distractiv, încercați să adăugați propriile caracteristici și grafică.

Sper că ți-a plăcut acest tutorial, mulțumesc pentru lectură!