Proiectați și dezvoltați un joc Fantastic Flash Shooting Gallery

În acest Tutorial Premium, vom învăța cum să combinăm mai multe clase și competențe ActionScript 3 pentru a crea un fantastic joc de fotografiere.


Pasul 1: Prezentare succintă

Folosind Flash Tools vom crea o grafică bună, care va fi alimentată de mai multe clase ActionScript 3 cum ar fi MouseCursor, Tween Nano, Sprite, Timeri și alte evenimente.

Utilizatorul va putea introduce numele unui jucător și va distruge un număr predefinit de dartboard-uri înainte de terminarea jocului.


Pasul 2: Setările documentului

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



Pasul 3: Interfața


O interfață colorată cu aspect frumos va alimenta codul nostru, aceasta implică mai multe forme, butoane, cursoare personalizate și multe altele.

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


Pasul 4: Sky


Un gradient radial albastru va fi cerul.

Selectați instrumentul Rectangle (R) și creați un dreptunghi de 720x335 px, utilizați panoul de culori pentru a aplica un fundal radial #EFFDFE, # 7FD7FF.


Pasul 5: Nori

Trei forme principale vor fi folosite pentru nori, restul va fi duplicat filmul MovieClips.


Utilizați Instrumentul Oval (O) pentru a crea cercuri și ovale de diferite dimensiuni, după ce ați obținut forma de nor care vă place, colorați-le folosind acest gradient fill # F1FBFF, # C3ECFF. Utilizați instrumentul de transformare a gradientului (F) pentru a roti gradientul.




Pasul 6: Munții

Să adăugăm niște munți la scenă.

Utilizați instrumentul Rectangle pentru a crea două dreptunghiuri de-a lungul scenei, utilizați acest gradient pe ele # 8DB400, # CFF500.


Cu instrumentul de selectare (V), apucați colțurile dreptunghiului și le dați o formă mai puțin pătrată.


Utilizați aceeași tehnică numai de această dată trăgând din laturile dreptunghiurilor (veți avea o curbă în cursorul mouse-ului), utilizați instrumentul Transformare gradient pentru a roti gradientul.



Pasul 7: Iarbă

Acesta este graficul de iarbă pe care îl vom crea. Este realizat din trei sau patru forme diferite în culori diferite.


Utilizați instrumentul Rectangle pentru a crea un dreptunghi și utilizați tehnica munților pentru a începe modificarea formei. Puteți vedea cum a fost creată iarba uitându-se la următoarea imagine:


Odată ce ai prima formă de iarbă, trebuie să modifici culorile și dimensiunile, apoi le-ai pus împreună și ai terminat.



Pasul 8: Sol

Graficul de la sol este destul de simplu, un fundal colorat # 5F4123, cu unele roci # 3A2814.


Fundalul dvs. ar trebui să arate astfel:



Pasul 9: Panoul de informații

Panoul de informații va afișa numele jucătorului, precum și scorul curent. Să începem prin crearea fundalului.

Utilizați instrumentul Primitiv dreptunghi pentru a crea un dreptunghi de 230x40 px, #CCCCCC, alfa 60% și așezați-l așa cum se vede în imagine.


Duplicați forma și modificați-o la 225x30 px, # 000000, alfa 70%. Centurați noua formă în fundal gri.


Transformați noua formă în MovieClip și denumiți-o infoBg.

Utilizați instrumentul Text (T) pentru a crea două câmpuri text dinamice și a le plasa în fundal.


Acesta este formatul folosit pentru numele jucătorului: Walway Rounded, 28pt, # 6CA8E6, nume de instanță: numele jucatorului.

Câmpul de text din lateral este: Walkway rounded, 32pt, #FFFFFF, name instance: scor.


Pasul 10: Cursorul

Cursorul personalizat este compus dintr-o serie de dreptunghiuri rotunjite și un cerc.


O privire la următoarea imagine vă va oferi o mai bună înțelegere a modului în care a fost făcută.



Pasul 11: Dartboard

Dartboard-ul este unul dintre elementele principale ale jocului, este obiectivul de a distruge.

Utilizați instrumentul Oval pentru a crea un cerc de 80x80 px cu acest gradient liniar # 697368, # 060604.


Duplicați forma, redimensionați-o la 64x64 px și schimbați gradientul la # F6F6F6, #DDDDDD.


Utilizați Instrumentul Oval Primitive pentru a crea un cerc de 46x46 px și pentru a modifica raza interioară la 75.00. Utilizați din nou gradientul negru.


Duplicați cercul alb, redimensionați-l la 18x18 px și completați-l cu # AF4F50.


Conversia Formelor în MovieClip și denumirea acestora dartboard, asigurați-vă că verificați Exportați pentru ActionScript cutie.


Pasul 12: Afișări

Un numărător de lovituri va fi în colțul din stânga sus al scenei.


Utilizați același format din câmpul TextName player, modificați culoarea în # FEE75C. Câmpul text dinamic este numit hit-uri.


Pasul 13: Panoul de nume


Acesta este panoul de nume, nimic greu despre asta.

Acesta va fi primul lucru care va fi arătat jucătorului. Acesta conține un nume de text de intrare numit nameField și dartboard-ul folosit ca buton numit beginButton.


Pasul 14: Sunetul

Vom reda un sunet când se lovește un dartboard. Există multe site-uri unde puteți descărca efecte sonore și muzică online, puteți obține efectul folosit în tutorial aici.


Pasul 15: Exportați sunetul pentru ActionScript

Pentru a folosi sunetul trebuie mai întâi să îl importăm în bibliotecă. Apăsați Cmd + R, navigați la sunetul pe care l-ați descărcat și faceți clic pe Deschidere.


Deschideți biblioteca și faceți clic dreapta pe pictograma de sunet, selectați Proprietăți și marchează Exportați pentru ActionScript cutie.


Aceasta termină faza grafică, permiteți începerea acțiunii ActionScripting!


Pasul 16: Noua 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 17: Tween Nano


Vom folosi un motor tween diferit de cel implicit inclus în bliț, ceea ce va crește performanța (este și mai ușor de utilizat). Puteți descărca Tween Nano de pe site-ul său oficial.


Pasul 18: Pachetul

Cuvântul cheie al pachetului vă permite să vă organizați codul în grupuri care pot fi importate de alte scripturi. Se recomandă să le numim începând cu o literă mică și să folosim intercaps pentru următoarele cuvinte, de exemplu: myClasses. Este, de asemenea, obișnuit să le denumiți utilizând site-ul companiei: com.mycompany.classesType.myClass.

În acest exemplu, folosim o singură clasă, deci nu este necesar să creați un folder de clase.

 pachet 

Pasul 19: Directiva privind importul

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; import flash.ui.Mouse; import com.greensock.TweenNano; importul flash.events.MouseEvent; importul flash.events.Event; import flash.utils.Timer; import flash.events.TimerEvent;

Pasul 20: Declararea și extinderea

Aici declarăm clasa utilizând clasă definirea cuvântului cheie urmat de numele pe care îl dorim pentru clasă, amintiți-vă că trebuie să salvați fișierul utilizând acest nume.

extinde cuvântul cheie definește o clasă care este o subclasă a unei alte clase. Subclasa moștenește toate metodele, proprietățile și funcțiile, astfel încât le putem folosi în clasa noastră.

 clasa publică principală extinde Sprite 

Pasul 21: Variabile

Acestea sunt variabilele pe care le vom folosi, citiți comentariile din cod pentru a afla mai multe despre fiecare.

 privat var gridY: Array = Array nou (); // Stochează coordonatele y în care un dartboard poate fi poziționat privat var gridX: Array = Array nou (); // Stochează coordonatele x în care un dartboard poate fi poziționat privat var xPos: int = 0; // Ultima pozitie x folosita de un dartboard privat var yPos: int = 0; // Pozitia cea mai recenta folosita de dartboard-uri private dartboard: Array = new Array (); // Stochează dartboard-urile sprites privat var smack: SmackSound = nou SmackSound (); // Sunetul care va fi redat când un dartboard este distrus temporar privat: Timer = timer nou (3000); // Cantitatea de timp de așteptare înainte de a schimba dartboard-urile în ecranul privat var currentDartboards: int = 0; // Dartboardurile afișate deja în stadiu, verifică nivelul de completare a nivelului privat la nivel de completareComplete: int = 30; // Dartboard-urile care trebuie afișate pentru a finaliza nivelul privat var varPanel: ScorePanel = new ScorePanel (); // O instanță a panoului de scoruri

Pasul 22: 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 executați utilizând Clasa de documente.

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

 funcția publică principală (): void startCustomCursor (); namePanelHandler (); updateScore (); bg.addEventListener (MouseEvent.MOUSE_DOWN, addHits); 

Pasul 23: Funcționarea panoului de nume

Această funcție animă panoul Nume în etapă și adaugă un ascultător butonului pentru a seta numele în câmpul Text când este activat.

 funcția privată numePanelHandler (): void namePanel.beginButton.stop (); numePanel.beginButton.addEventListener (MouseEvent.MOUSE_UP, setPlayerName); TweenNano.from (numePanel, 0.5, y: -namePanel.height / 2); 

Pasul 24: Setați numele jucătorului

Setează numele scris în câmpul text al panoului de nume în câmpul Nume jucător în panoul Informații.

 funcția privată setPlayerName (e: MouseEvent): void smack.play (); namePanel.beginButton.gotoAndPlay (3); playerName.text = numePanel.nameField.text; TweenNano.to (numePanel, 0.5, y: stage.stageHeight + namePanel.height / 2, onComplete: beginGame); 

Pasul 25: Adăugați cursorul personalizat

Următoarea funcție face cursorul personalizabil draggable, de asemenea, ascunde cursorul implicit al mouse-ului.

 funcția privată startCustomCursor (): void Mouse.hide (); cursor.startDrag (true); 

Pasul 26: Grila de dartboard

Aceasta este o funcție importantă, calculează zona de scenă și creează o grilă bazată pe dimensiunea Dartboard (80px).

Vom utiliza matricele rezultate mai târziu pentru a împiedica apariția dartboard-urilor în fața celuilalt.

 funcția privată calculateGrid (): void gridX = []; gridY = []; pentru (var h: int = 1; h <= (stage.stageHeight - 160) / 80; h++) //The - reduces invisible/used area  gridY.push(80 * h);  for (var v:int = 1; v <= (stage.stageWidth - 160) / 80; v++)  gridX.push(80 * v);  

Pasul 27: Adăugați dartboard-uri aleatoare

Următoarea funcție va crea și adăuga dartboard-urile create de Cantitate parametru.

Urmează această logică:

  • Calculați grilă (face doar o singură dată)
  • Creați o nouă instanță Dartboard și împiedicați redarea acesteia
  • Utilizați o poziție aleatorie din matricele de poziții
  • Îndepărtați ultima poziție folosită pentru a evita adăugarea unor dartboard-uri în același loc
  • Adăugați distrugătorul ascultătorului la dartboard
  • Adăugați tabla de dart la scenă și animați-o
  • Adăugați tablă de dart la matricea dartboard-urilor
  • Obțineți cea mai mare adâncime cea mai mare (frecvent solicitat în AS3, ia notă) pentru cursorul personalizat
  • Adăugați unul în lista de darts afișate
 funcția privată addRandomDartboards (suma: int): void calculateGrid (); pentru (var i: int = 0; i < amount; i++)  var dartboard:Dartboard = new Dartboard(); dartboard.stop(); xPos = gridX[Math.floor(Math.random() * gridX.length)]; yPos = gridY[Math.floor(Math.random() * gridY.length)]; dartboard.x = xPos + 40; dartboard.y = yPos + 40; gridX.splice(gridX.indexOf(xPos), 1); gridY.splice(gridY.indexOf(yPos), 1); dartboard.addEventListener(MouseEvent.MOUSE_DOWN, destroyDartboard); addChild(dartboard); TweenNano.from(dartboard, 0.6, rotationY: 180); TweenNano.from(dartboard, 0.6, scaleX: 0.4); TweenNano.from(dartboard, 0.6, scaleY: 0.4); dartboards.push(dartboard); setChildIndex(cursor, (numChildren - 1)); currentDartboards++;  

Pasul 28: Distrugeți Dartboard

Această funcție gestionează animația pentru un darboard care a fost lovit, de asemenea, elimină dartboard-ul din tabloul dartboard-urilor și adaugă altele dacă nu mai există clipuri în scenă.

Scorurile și scorurile animațiilor sunt tratate și aici.

 funcția privată distrugeDartboard (e: MouseEvent): void smack.play (); // Sunetul de sunet e.target.removeEventListener (MouseEvent.MOUSE_DOWN, destroyDartboard); e.target.gotoAndPlay (3); e.target.addEventListener (Event.ENTER_FRAME, removeDartboard); dartboards.splice (dartboards.indexOf (e.target), 1); // Eliminați din matrice dacă (dartboards.length == 0) // Adăugați noi darboards dacă toate au fost distruse timer.stop (); addRandomDartboards (5); timer.start ();  / * Actualizare scoruri, hit-uri și redare animație lovit * / updateScore (1); updateHits (1); var plusOne: ScorePlus = noul ScorePlus (); plusOne.x = e.target.x; plusOne.y = e.target.y + plusOne.height; addChild (plusone); TweenNano.from (plusOne, 0,5, scaleX: 0,5); TweenNano.from (plusOne, 0,5, scaleY: 0,5, onComplete: removeScoreGFX, onCompleteParams: [plusOne]); 

Pasul 29: Eliminați graficul de scoruri

Elimină scorul "+1" din movieclip.

 funcția privată removeScoreGFX (target: Sprite): void removeChild (target); 

Pasul 30: Scoateți dartboard

Verifică dacă animația darboard sa încheiat și o înlătură dacă este adevărată.

 funcția privată removeDartboard (e: Event): void if (e.target.currentFrame == 8) e.target.removeEventListener (Event.ENTER_FRAME, removeDartboard); removeChild (e.target ca Sprite); 

Pasul 31: Scorul de actualizare

Adaugă scorul indicat la textul TextField.

 funcția privată updateScore (addToScore: int = 0): void score.text = String (int (score.text) + addToScore); 

Pasul 32: Actualizați accesările

Se adaugă 1 la scorul loviturilor, aceasta se numește atunci când un dartboard este distrus.

 funcția privată updateHits (addToHits: int = 0): void hits.text = String (int (hits.text) + addToHits); TweenNano.from (rezultate, 0,3, y: -5); 

Pasul 33: Adăugați rezultate

Adaugă scorul total de lovituri la scorul TextField.

 funcția privată addHits (e: MouseEvent): void score.text = String (int (score.text) + int (hits.text)); hits.text = "0"; 

Pasul 34: Începeți jocul

Inițiază jocul.

Creează dartboard-uri, elimină panoul de nume al jucătorilor și pornește cronometrul.

 funcția privată beginGame (restart: Boolean = false): void if (! restarting) removeChild (numePanel);  addRandomDartboards (5); timer.addEventListener (TimerEvent.TIMER, removeRemainingListeners); timer.start (); 

Pasul 35: Eliminați restul

Îndepărtează dartboard-urile care nu au fost lovite și adaugă altele noi dacă nivelul nu este complet.

 funcția privată removeRemaining (): void pentru (var i: int = dartboards.length-1; i> = 0; i--) removeChild (dartboard-uri [i]); dartboards.length = i; dacă (dartboards.length == 0 &&Dartboards current < levelComplete)  addRandomDartboards(5); timer.start();  else if (dartboards.length == 0 && currentDartboards >= levelComplete) // Dacă nivelul este complet levelCompleted (); 

Pasul 36: Nivelul este complet

Dacă toate tablourile dartboard admise au fost afișate în stadiu, această funcție va fi executată.

Calculează scorul final, ascunde panoul de informații și arată ScorePanel.

 funcția privată de nivelComplet (): void score.text = String (int (score.text) + int (hits.text)); hits.text = "0"; score.visible = false; playerName.visible = false; TweenNano.to (infoBg, 0,5, x: -infoBg.width / 2); scorePanel.x = stage.stageWidth + scorePanel.width / 2; scorePanel.y = stage.stageHeight / 2; scorePanel.myScore.text = score.text; scorePanel.playAgain.addEventListener (MouseEvent.MOUSE_UP, reporniți); addChild (scorePanel); setChildIndex (cursor, (numChildren - 1)); TweenNano.to (scorPanel, 0,5, x: stage.stageWidth / 2); 

Pasul 37: reporniți

Următoarele linii fac posibilă repornirea. Veți găsi tot ce este explicat în comentarii.

 restartarea funcției private (e: MouseEvent): void score.visible = true; // ascunde scorul score.text = "0"; // Setează scorul la 0 playerName.visible = true; // Afișează din nou numele jucătorului scorePanel.playAgain.removeEventListener (MouseEvent.MOUSE_UP, restart); // Îndepărtează ascultătorul de la butonul din panoul de scor TweenNano.to (infoBg, 0.5, x: infoBg.width / 2); // Animă panoul de informații și panoul de scor TweenNano.to (ScorePanel, 0.5, x: stage.stageWidth + scorePanel.width / 2, pecomplet: removeScorePanel); currentDartboards = 0; // resetează lista curentă de dartsboard beginGame (true); // începe jocul

Pasul 38: Eliminați panoul de scoruri

Îndepărtează panoul de scor din stadiul când animația este finalizată.

 funcția privată removeScorePanel (): void removeChild (scorePanel); 

Pasul 39: Clasa de documente


Vom folosi clasa de documente în acest tutorial, dacă nu știți cum să o utilizați sau sunteți puțin confuză vă rugăm să citiți acest QuickTip.


Pasul 40: Testați filmul


Acum sunteți gata să vă testați jocul, mergeți la Flash și apăsați Cmd + Return, verificați dacă totul funcționează conform așteptărilor și distrați-vă!


Concluzie

Rezultatul final este un joc plin de culoare și distractiv, încercați să-l personalizați, ce despre un port Android?

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

Cod