Creați un joc cu Slot Machine în Flash folosind AS3

Urmați pașii direcți ai acestui Premium Tutorial pentru a crea un joc de Slot pentru divertisment în Flash. Rotiți roțile și vedeți ce ați putea câștiga!


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ă parieze sume diferite pentru a câștiga premiile.


Pasul 2: Setări Flash Document

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



Pasul 3: Interfața


Se va afișa o interfață închisă; acest lucru implică mai multe forme, butoane, bitmap-uri și multe altele.

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


Pasul 4: Contextul

Creați un dreptunghi de 480x320 px și completați-l cu acest gradient radial: # 404040, # 080808.


Utilizați panoul Align (Cmd + K) pentru a centra în fază.


Pasul 5: Titlul

Să adăugăm un titlu la jocul nostru; în funcție de tema mașinii dvs. Slot, puteți schimba grafica pentru a se potrivi nevoilor dvs. Aici am folosit sigla Tuts +.



Pasul 6: Contextul sloturilor

Utilizați Instrumentul primitiv dreptunghi (R) pentru a crea un dreptunghi de 320x160px. Schimbați raza de colț la 10 și completați-o cu acest gradient liniar: # F5DA95, # 967226, # 91723B.


Duplicați forma, schimbați dimensiunea acesteia la 316x156px și schimbați culoarea spre gradientul liniar negru utilizat anterior.



Pasul 7: Elemente grafice

Acestea sunt grafica pe care o vom folosi ca elemente de slot machine - nu ezitați să utilizați orice grafică doriți în propriul joc!



Pasul 8: Background-urile cu role

Pentru a crea fundalul pentru role, utilizați instrumentul Rectangle (R) pentru a crea un dreptunghi de 98x146px și completați-l cu acest gradient: # 8F8459, # F8F4C7, # 8F8459.


Duplicați formele și aliniați-le în zona de sloturi.


Pasul 9: Filmul cu role

Aranjați elementele grafice în ordinea dorită și convertiți-le în clipuri video. Vom folosi dreptunghiul fundal al tamburului ultimului pas pentru a crea efectul de umbră: schimbați culoarea neagră și modificați valorile alfa la 65, 15, 0.

Aceasta poate fi o parte complicată, deci asigurați-vă că descărcați fișierele sursă pentru a vă ajuta să ieșiți.


După cum puteți vedea, am folosit două logo-uri Nettuts + și două logo-uri Psdtuts +, dar numai câte unul dintre logo-urile Activetuts + și Vectortuts +. Acest lucru înseamnă că există o posibilitate mai mare de potrivire a trei logo-uri Nettuts + decât de potrivire a trei logo-uri Activetuts +.

Utilizați umbra ca strat de mască și linia de timp pentru a anima elementele în jos. Am folosit animația cadru cu cadru, mișcând elementele de 20 de pixeli în jos în fiecare cadru. Ai putea folosi un tween, dacă vrei.


Duplicați acest MoveClip și plasați-le în fundalul slotului corect. Utilizați următoarele nume de instanțe: items1, items2, items3.


Pasul 10: Etichete

Etichetele de timp vor fi folosite pentru a verifica o combinație câștigătoare. Creați un nou strat și etichetați fiecare cadru în care elementul nostru se află în centru.



Pasul 11: Obiectele de text statice

Utilizați instrumentul Text (T) pentru a crea trei câmpuri text statice: credite, Pariu și Câștigătorul plătit.



Pasul 12: Elemente de text dinamice

Cu instrumentul Text selectat, creați trei câmpuri text dinamice, plasați-le deasupra celor statice și denumiți-le, de la stânga la dreapta: creditsT, betT și paidT.



Pasul 13: Butoane

Utilizați instrumentul Primitiv dreptunghi pentru a crea trei patrate 45x45px, modificați raza de colț la 4 și completați-l cu: # CD0202, # 910202. Adăugați fiecare etichetă de text corespunzătoare, convertiți fiecare la un buton și denumiți-le: payTabB, betMaxB și betOneB.



Pasul 14: butonul de rotire

Butonul Spin este puțin mai mare decât celelalte și are și o altă culoare.

Utilizați același proces al celorlalte butoane, dar schimbați dimensiunea la 50x50 px și culoarea la: # 5DA012, 3C670C.


Denumiți butonul spinB.


Pasul 15: Sunete


Vom folosi Sound Effects pentru a îmbunătăți sentimentul jocului, puteți găsi sunetele folosite în acest exemplu în Soungle.com utilizând cuvintele cheie jocuri mecanice.


Pasul 16: TweenNano


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 TweenNano de pe site-ul său oficial.


Pasul 17: 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 18: 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 19: 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.MouseEvent; import com.greensock.TweenNano; import flash.utils.Timer; import flash.events.TimerEvent;

Pasul 20: Variabile

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

 var payTable: PayTable; // O instanță a tabelului de plată var timer: Timer; // Obiect temporizator care controlează durata rotirilor / * Sunete * / buton varS: ButtonsS = Butoane noi (); var spinS: SpinS = SpinS nou (); var stopS: StopS = Stopuri noi (); var winS: WinS = WinS nou ();

Pasul 21: Codul constructorului

Constructorul este o funcție care rulează atunci când un obiect este creat dintr-o clasă, acest cod este primul care se execută când faceți o instanță a unui obiect sau executați atunci când SWF se încarcă mai întâi dacă aparține clasei 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ă finală Main (): void // Code

Pasul 22: Opriți elementele

Împiedicați filmările să cedeze imediat.

 items1.stop (); items2.stop (); items3.stop ();

Pasul 23: Adăugați ascultarea butoanelor

Aici folosim o functie personalizata pentru a adauga mouse-ul pe butoanele noastre; această funcție va fi creată mai târziu în clasă.

 buttonListeners ( 'add');

Pasul 24: Dezactivați butonul Spin

Apoi vom folosi o altă funcție personalizată care va împiedica apariția evenimentelor mouse-ului de pe butonul Spin.

 butoane ("dezactivare", spinB);

Pasul 25: Ascultați butoanele

Această funcție adaugă sau elimină un eveniment MouseUp la butoane în funcție de parametrul specificat.

 butonul funcției finale private Listeners (e: String): void if (e == 'add') spinB.addEventListener (MouseEvent.MOUSE_UP, spinBtn); betMaxB.addEventListener (MouseEvent.MOUSE_UP, betMax); betOneB.addEventListener (MouseEvent.MOUSE_UP, betOne); payTabB.addEventListener (MouseEvent.MOUSE_UP, payTableHandler);  altfel spinB.removeEventListener (MouseEvent.MOUSE_UP, spinBtn); betMaxB.removeEventListener (MouseEvent.MOUSE_UP, betMax); betOneB.removeEventListener (MouseEvent.MOUSE_UP, betOne); payTabB.removeEventListener (MouseEvent.MOUSE_UP, payTableHandler); 

Pasul 26: Butoanele de activare / dezactivare

Următoarea funcție utilizează parametrii săi între valoarea alfa a butonului specificat și dezactiva / activa interacțiunile mouse-ului.

 butoane funcționale finale private (acțiune: String,? btns): void var btnsLen: int = btns.length; dacă (action == 'enable') pentru (var i: int = 0; i < btnsLen; i++)  btns[i].enabled = true; btns[i].mouseEnabled = true; TweenNano.to(btns[i], 0.5, alpha:1);   else  for(var j:int = 0; j < btnsLen; j++)  btns[j].enabled = false; btns[j].mouseEnabled = false; TweenNano.to(btns[j], 0.5, alpha:0.2);   

Pasul 27: Butonul Bet Max

Butonul Bet Max este gestionat de această funcție.

Redă sunetul de spin, schimba câmpurile de text pentru credite, și apelează funcția de rotire.

 funcția finală privată betMax (e: MouseEvent): void / * Sound * / spinS.play (); / * Spin dacă suficiente credite * / dacă (int (creditsT.text)> = 3) betT.text = '3'; butoane ("dezactivare", spinB, betOneB, betMaxB, payTabB); a invarti(); 

Pasul 28: pariază un buton

Butonul Bet One este gestionat de această funcție.

Mărește pariul cu unul (dacă este posibil) și redă sunetul corespunzător butonului. Acesta permite, de asemenea, butonul Spin.

 funcția finală privată betOne (e: MouseEvent): void / * Sound * / buttonS.play (); / * Bet One * / dacă (betT.text == '3') betT.text = '1';  altceva betT.text = String (int (betT.text) + 1);  / * Activați butonul Spin * / dacă (spinB.enabled == false) butoane ('enable', spinB); 

Pasul 29: Afișare / Ascundere tabel plătit

Butonul Pay Table este gestionat de această funcție.

Verifică dacă masa de plată este deja pe scenă și, dacă nu, folosește un Tween pentru ao afișa și pentru ao centra. Celelalte butoane sunt dezactivate în timp ce se afișează tabelul.

 funcția finală privată payTableHandler (e: MouseEvent): void / * Sound * / buttonS.play (); / * Afișează dacă nu în stadiu * / if (payTable == null) payTable = new PayTable (); payTable.x = stage.stageWidth * 0.5; payTable.y = stage.stageHeight * 0.5; addChild (Paytable); TweenNano.from (payTable, 0,2, scaleX: 0,4, scaleY: 0,4); / * Dezactivați butoanele * / butoanele ("dezactivare", spinB, betMaxB, betOneB);  altceva TweenNano.to (payTable, 0.2, scaleX: 0.1, scaleY: 0.1, alpha: 0, onComplete: function destroyPT (): void removeChild (payTable); payTable = null); / * Activați butoanele * / dacă (betT.text! = '0') butoane ('enable', spinB);  butoane ('enable', betMaxB, betOneB); 

Pasul 30: butonul de rotire

Butonul Spin este manipulat de această funcție.

Redă sunetul de spin și funcția Spin dacă creditele sunt corecte.

 funcția finală privată finală spinBtn (e: MouseEvent): void / * Sound * / spinS.play (); / * Spin dacă suficiente credite * / dacă (int (creditsT.text)> = int (betT.text)) spin (); butoane ("dezactivare", spinB, betOneB, betMaxB, payTabB); 

Pasul 31: Funcția Spin

Una dintre funcțiile esențiale ale jocului, funcția de rotire se ocupă de câștigarea și cheltuirea creditelor, rotirea elementelor în sloturi și folosirea unui cronometru pentru a le opri. Citiți pașii următori pentru o vizualizare mai detaliată a acestor acțiuni.

 funcția finală privată finală (): void // Code

Pasul 32: Adăugați credite câștigate

Acest lucru verifică dacă creditele sunt disponibile pentru a adăuga din paidT textfield și își resetează valoarea la 0.

 creditsT.text = String (int (crediteT.text) + int (paidT.text)); paidT.text = '0';

Pasul 33: scăderea creditelor

Aceasta scade creditele utilizate în ultimul pariu.

 creditsT.text = String (int (creditsT.text) - int (betT.text));

Pasul 34: Obiecte spin

Această funcție animă rolele, pentru a face ca elementele să pară să se rotească.

 items1.play (); items2.play (); items3.play ();

Pasul 35: Cronometrul Spin

Acest cronometru determină (la întâmplare) timpul pentru a permite rotirea obiectelor cu role, este diferit la fiecare rotire.

 timer = timer nou (Math.floor (Math.random () * 1000) + 500); timer.addEventListener (TimerEvent.TIMER, handleTimer); timer.start ();

Pasul 36: Funcția cronometrului

Această funcție este executată de fiecare dată când temporizatorul își termină numărul.

Aceasta oprește slotul curent de la rotire și redă sunetul de oprire. Când toate elementele sunt oprite, se șterge temporizatorul și se apelează checkWin () funcţie.

 funcția privată handleTimer (e: TimerEvent): void if (timer.currentCount == 1) stopItem (items1.currentFrame, items1); / * Sunet * / stopS.play ();  dacă (timer.currentCount == 2) stopItem (items2.currentFrame, items2); / * Sunet * / stopS.play ();  dacă (timer.currentCount == 3) stopItem (items3.currentFrame, items3); / * Sunet * / stopS.play (); / * Oprire temporizator * / timer.stop (); timer.removeEventListener (TimerEvent.TIMER, handleTimer); timer = null; / * Activați butoanele * / butoane ('enable', spinB, betOneB, betMaxB, payTabB); / * Verificați elementele pentru o combinație câștigătoare * / checkWin (); 

Pasul 37: Ajungeți la cel mai apropiat logo

Deoarece cronometrul se poate termina într-un cadru în care elementul curent nu se află în centru, verificăm cadrul curent al filmului și utilizați gotoAndStop () pentru a afișa elementul cel mai apropiat.

 funcția finală privată finală stopItem (cFrame: int, targetItem: MovieClip): void if (cFrame> = 2 && cFrame <= 5)  targetItem.gotoAndStop(5);  else if(cFrame >= 6 && cFrame <= 9)  targetItem.gotoAndStop(9);  else if(cFrame >= 10 && cFrame <= 13)  targetItem.gotoAndStop(13);  else if(cFrame >= 14 && cFrame <= 17)  targetItem.gotoAndStop(17);  else if(cFrame >= 18 && cFrame <= 21)  targetItem.gotoAndStop(21);  else if(cFrame >= 22 && cFrame <= 24)  targetItem.gotoAndStop(1);  else if(cFrame == 1)  targetItem.stop();  

Este posibil să fie necesar să modificați acest cod pentru a se potrivi cu simbolurile și animația de spin pe care ați ales-o.


Pasul 38: Verificați Win

Această funcție verifică dacă cele trei elemente sunt egale, dacă este adevărată, redă sunetul câștigător și adaugă suma corespunzătoare la plătit textfield.

 funcția finală privată checkWin (): void if (items1.currentLabel == items2.currentLabel && items2.currentLabel == items3.currentLabel) / * Sound * / winS.play (); / * Obțineți eticheta curentă pentru a determina valoarea elementului * / var lbl: String = items1.currentLabel; dacă lbl == 'a') paidT.text = String (100 * int (betT.text));  altfel dacă (lbl == 'v') paidT.text = String (50 * int (betT.text));  altfel dacă (lbl == 'p') paidT.text = String (25 * int (betT.text));  altfel dacă (lbl == 'n') paidT.text = String (10 * int (betT.text)); 

Pasul 39: Setați clasa principală


Folosim 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.

Setați clasa de documente FLA la Principal.


Pasul 40: Încercați

Suntem gata să testăm filmul și să vedem dacă totul funcționează așa cum era de așteptat, nu uitați să încercați toate butoanele!



Concluzie

Rezultatul final este un joc personalizabil și distractiv; încercați să adăugați grafice personalizate și premii! De asemenea, puteți schimba probabilitatea de a face mai ușor sau mai greu să câștigați.

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