Creëer een Whack-a-Mol-game in Flash met AS3

In deze tutorial leer je hoe je je eigen versie van het klassieke Whack-a-Mole-spel kunt maken - alleen onze ongelukkige wezens van keuze zullen wormen zijn. Je kunt de snelheid van het spel en de hitboxen van de wormen aanpassen.


Stap 1: Kort overzicht

We zullen met name veelgebruikte ActionScript 3-klassen gebruiken Muis evenementen om een ​​vermakelijk te maken Sla een mol zoals game in Flash


Stap 2: Instellingen voor Flash-document

Open Flash en maak een 480 pixels breed, 320 pixels lang document. Stel de beeldsnelheid in op 24 fps.

(Let op: er is een fout gemaakt in de afbeelding hierboven, de breedte en hoogte zijn de verkeerde kant op! Dank aan Roel Traa voor het wijzen van dit.)


Stap 3: Interface


Er zal een eenvoudige en vriendelijke interface worden gebruikt, met verschillende vormen, knoppen en MovieClips, ga verder met de volgende stappen om deze GUI te bouwen.


Stap 4: Achtergrond

Selecteer de Rechthoekgereedschap (R) om een ​​rechthoek van 320x480px # CC9866, # BA7743 te maken en in het werkgebied te centreren.


Stap 5: Titel

Gebruik de Text Tool (T) om een ​​titel toe te voegen met uw favoriete lettertype. Je kunt ook een deel van de graphics van de game gebruiken om het mooier te maken. De wormafbeelding die in deze zelfstudie wordt gebruikt, is gedownload van hier onder a Creative Commons Licentie.


Stap 6: Knoppen

Gebruik opnieuw de Text Tool om drie knoppen te maken zoals in de bovenstaande afbeelding. Converteer ze naar knoppen en geef ze beschrijvende instantienamen zodat ze deze later in de code gemakkelijk kunnen gebruiken. Converteer de grafische afbeeldingen in een enkele fase Filmclip en noem het TitleView, vergeet niet om de Exporteren voor ActionScript-box.


Stap 7: Opties

Wis de laatste weergave behalve de achtergrond en maak een reeks Dynamische tekstvelden zoals weergegeven in de afbeelding, geef beschrijvende instantienamen en converteer ze naar knoppen. Gebruik de Rechthoekgereedschap (R) om een ​​pijlknop te maken die wordt gebruikt om terug te gaan naar de Titelscherm.


Stap 8: Credits

De credits scherm verschijnt voor de Titel Scherm, gebruik de grafische elementen en lettertypen die u eerder hebt gebruikt om het te maken. Noem maar op CreditsView en vergeet niet om de Exporteren voor ActionScript doos.


Stap 9: Spelscherm

Eenvoudige cartoonachtige afbeeldingen worden gebruikt in de Spel Scherm, er is niet echt een procedure om deze afbeeldingen te maken, gebruik alleen je fantasie en de Flash-tekengereedschappen om zoiets als de bovenstaande afbeelding te maken. Elke hole in het spelscherm is een Filmclip die een animatie bevat van de worm die uitkomt, het is in feite een eenvoudige beeld-voor-beeld animatie, zorg ervoor dat je de bron controleert voor een beter begrip.


Stap 10: Waarschuwing


Een waarschuwing wordt getoond als alle Wormen zijn getoond, het geeft de uiteindelijke score weer die je hebt bereikt. Gebruik de Rechthoekgereedschap om het te maken en een beschrijvende naam toe te voegen aan het onderste TextField, stel de instantienaam in AlertView en markeer de Exporteren voor ActionScript doos.


Stap 11: TweenNano

We gebruiken een andere tween-engine dan de standaard die is opgenomen in de flitser, dit vergroot de prestaties en is gemakkelijker te gebruiken.

Je kunt TweenNano downloaden van de officiële website.


Stap 12: Soungle

We gebruiken Geluidseffecten om het gevoel van het spel te verbeteren, je kunt het geluid dat in dit voorbeeld wordt gebruikt in Soungle.com vinden met het sleutelwoord raken.


Stap 13: Stel de documentklasse in

We zullen onze applicatie interactief maken door een externe klasse te gebruiken, zijn naam toevoegen aan de Klasse veld in de Publiceren deel van de eigenschappen panel om de FLA te koppelen aan de hoofddocumentklasse.


Stap 14: Maak een nieuwe ActionScript-klasse

Maak een nieuwe ActionScript 3.0-klasse (Cmd + N) en sla deze op als Main.as in je klasmap.


Stap 15: klassenstructuur

Maak uw standaard klassenstructuur om te beginnen met het schrijven van uw code.

 pakket import flash.display.Sprite; public class Hoofd breidt uit openbare functie Main (): void // constructor code

Stap 16: Vereiste klassen

Dit zijn de klassen die we moeten importeren voor onze klas om te werken, de importeren richtlijn maakt extern gedefinieerde klassen en pakketten beschikbaar voor uw code.

 import flash.display.Sprite; import flash.text.TextField; import flash.utils.Timer; import flash.events.TimerEvent; import flash.events.MouseEvent; import flash.net.navigateToURL; import flash.net.URLRequest; import com.greensock.TweenNano; import com.greensock.easing.Expo;

Stap 17: Variabelen

Dit zijn de variabelen die we zullen gebruiken, lees de opmerkingen in de code om meer over hen te weten, sommige van hun namen verklaren zichzelf, dus daar zal geen commentaar zijn.

 private var titleView: TitleView = new TitleView (); privé var opties: OptionsView; private var credits: CreditsView; private var lastSelected: TextField; // de laatst geselecteerde snelheid in het optiescherm private var lastSelected2: TextField; // het laatste geselecteerde hitgebied in het optiescherm private var hitSize: Number = 1; // hit size mask is op volledige schaal aan het begin private var timer: Timer = new Timer (1400); // standaardtijd voor de wormen om privé var gaten te verschijnen: Vector. = nieuwe Vector.(); // slaat de 8 holes op in de fase private var currentWorms: int = 0; // wormen al getoond private var wormsHit: int = 0; private var totalWorms: String = '10'; // totaal aantal wormen dat moet worden weergegeven

Stap 18: Constructor

De constructor is een functie die wordt uitgevoerd wanneer een object is gemaakt op basis van een klasse, deze code is de eerste die wordt uitgevoerd wanneer u een instantie van een object maakt of wordt uitgevoerd met de boedelDocumentklasse.

Het roept de nodige functies op om het spel te starten. Controleer die functies in de volgende stappen.

 public final function Main (): void addChild (titleView); holes.push (h1, h2, h3, h4, h5, h6, h7, h8); startButtonListeners (); 

Stap 19: Start Button Luisteraars

We beginnen met het toevoegen van de muisluisteraars aan de knoppen in de titelweergave, dit brengt ons naar het spel, opties of credits scherm.

 private final function startButtonListeners (action: String = 'add'): void if (action == 'add') titleView.creditsB.addEventListener (MouseEvent.MOUSE_UP, showCredits); titleView.optionsB.addEventListener (MouseEvent.MOUSE_UP, addOptions); titleView.playB.addEventListener (MouseEvent.MOUSE_UP, showGameView);  else titleView.creditsB.removeEventListener (MouseEvent.MOUSE_UP, showCredits); titleView.optionsB.removeEventListener (MouseEvent.MOUSE_UP, addOptions); titleView.playB.removeEventListener (MouseEvent.MOUSE_UP, showGameView); 

Stap 20: Opties toevoegen

De opties Scherm wordt getweend wanneer de gebruiker op de optieknop klikt, een muisluisteraar wordt toegevoegd aan de pijlknop om deze te verwijderen wanneer hij klaar is.

 private finale functie addOptions (e: MouseEvent): void options = new OptionsView (); addChild (opties); TweenNano.from (opties, 0.3, x: stage.stageWidth, onComplete: function (): void options.backBtn.addEventListener (MouseEvent.MOUSE_UP, hideOptions);); optionsListeners (); 

Stap 21: Opties Luisteraars

Deze luisteraars worden toegevoegd wanneer de opties Scherm getoond, ze behandelen de knoppen op het podium. Meer van zijn gedrag in de volgende stappen.

 private laatste functieoptiesListeners (actie: String = 'toevoegen'): void if (action == 'add') options.slowBtn.addEventListener (MouseEvent.MOUSE_UP, changeSpeed); options.mediumBtn.addEventListener (MouseEvent.MOUSE_UP, changeSpeed); options.fastBtn.addEventListener (MouseEvent.MOUSE_UP, changeSpeed); options.smallBtn.addEventListener (MouseEvent.MOUSE_UP, selectHitArea); options.mediumBtn1.addEventListener (MouseEvent.MOUSE_UP, selectHitArea); options.bigBtn.addEventListener (MouseEvent.MOUSE_UP, selectHitArea);

Stap 22: Stel de standaardoptie in

De standaardopties worden ingesteld door deze regels, ze stellen de momenteel geselecteerde knoppen in die traag en groot zijn.

 lastSelected = options.slowBtn.slowTF; lastSelected2 = options.bigBtn.bigTF;

Stap 23: Optie Luisteraars verwijderen

Een parameter bepaalt of de listeners worden toegevoegd of verwijderd, de volgende regels worden uitgevoerd als die parameter niet aangeeft dat de listeners moeten worden toegevoegd.

 else options.slowBtn.removeEventListener (MouseEvent.MOUSE_UP, changeSpeed); options.mediumBtn.removeEventListener (MouseEvent.MOUSE_UP, changeSpeed); options.fastBtn.removeEventListener (MouseEvent.MOUSE_UP, changeSpeed); options.smallBtn.removeEventListener (MouseEvent.MOUSE_UP, selectHitArea); options.mediumBtn1.removeEventListener (MouseEvent.MOUSE_UP, selectHitArea); options.bigBtn.removeEventListener (MouseEvent.MOUSE_UP, selectHitArea); 

Stap 24: Verberg opties

De pijlknop verwijdert de opties scherm wanneer erop wordt geklikt.

 private laatste functie hideOptions (e: MouseEvent): void TweenNano.to (opties, 0.3, x: stage.stageWidth, onComplete: function (): void options.removeEventListener (MouseEvent.MOUSE_UP, hideOptions); removeChild (opties) ; options = null;); 

Stap 25: verander de kleur van TextField

Deze functie wordt uitgevoerd wanneer de snelheidsknoppen worden ingedrukt, het eerste deel verandert de tekstkleur van de knoppen, het verandert de huidige optie in wit en de nieuwe geselecteerde waarde in geel.

 private laatste functie changeSpeed ​​(e: MouseEvent): void / * Wijzig doel en laatst geselecteerde kleur * / lastSelected.textColor = 0xFFFFFF; e.target.textColor = 0xFF9966;

Stap 26: Knop Detecteren detecteren

Dit is het tweede deel van de snelheidsfunctie, het detecteert dat op de knop is geklikt, controleert de naam en verhoogt / verlaagt de naam timer overeenkomstig.

 if (e.target.name == 'slowTF') timer = new Timer (1400); lastSelected = e.target als TextField;  else if (e.target.name == 'mediumTF') timer = new Timer (1100); lastSelected = e.target als TextField;  else if (e.target.name == 'fastTF') timer = new Timer (800); lastSelected = e.target als TextField; 

Stap 27: Selecteer Hit Area

De volgende functie wordt uitgevoerd wanneer op een knop op de selectie van het hitgebied wordt geklikt. Het gedraagt ​​zich op dezelfde manier als de laatste functie.

 private laatste functie selectHitArea (e: MouseEvent): void / * Wijzig doel en laatst geselecteerde kleur * / lastSelected2.textColor = 0xFFFFFF; e.target.textColor = 0xFF9966; / * Detecteer de geklikte knop en wijzig het treffergebied dienovereenkomstig * / if (e.target.name == 'smallTF') hitSize = 0; lastSelected2 = e.target als TextField;  else if (e.target.name == 'mediumTF') hitSize = 0.5; lastSelected2 = e.target als TextField;  else if (e.target.name == 'bigTF') hitSize = 1; lastSelected2 = e.target als TextField; 

Stap 28: Toon credits

De credits scherm wordt getoond wanneer de gebruiker op de creditsknop klikt, een muisluisteraar wordt volledig toegevoegd Filmclip om het te verwijderen.

 private finale functie showCredits (e: MouseEvent): void titleView.optionsB.visible = false; titleView.creditsB.visible = false; titleView.playB.visible = false; credits = nieuwe CreditsView (); addChild (credits); TweenNano.from (credits, 0.3, x: -credits.width, onComplete: function (): void credits.addEventListener (MouseEvent.MOUSE_UP, hideCredits);); 

Stap 29: Verberg tegoeden

Wanneer de credits op het scherm wordt geklikt, het wordt terug getweend en van het werkgebied verwijderd.

 private laatste functie hideCredits (e: MouseEvent): void TweenNano.to (credits, 0.3, x: -credits.width, onComplete: function (): void titleView.creditsB.visible = true; titleView.playB.visible = true; titleView.optionsB.visible = true; credits.removeEventListener (MouseEvent.MOUSE_UP, hideCredits); removeChild (credits); credits = null;); 

Laten we hier stoppen om een ​​snelle test uit te voeren en ervoor te zorgen dat onze spelcode werkt:

Houd er rekening mee dat sommige regels zijn becommentarieerd omdat sommige functies nog niet zijn gemaakt.

Vergeet niet dat de mijlpalen zijn opgenomen in de bronbestanden, dus als dit om een ​​of andere reden niet in dit bestand voorkomt, kijk dan eens naar de bron om te zien wat dat kan veroorzaken.


Stap 30: Spelweergave tonen

De volgende regels verwijderen de Titel scherm en verlaat de Spel Scherm zichtbaar. Het roept ook een functie op om het spel voor te bereiden.

 private finale functie showGameView (e: MouseEvent): void TweenNano.to (titleView, 0.3, y: -titleView.height, onComplete: function (): void startButtonListeners ('rmv'); removeChild (titleView); titleView = nul;); prepareWorms (); 

Stap 31: Wormen Muisluisteraars

We gebruiken hier een for-verklaring om een ​​toe te voegen Muisluisteraar naar elke hole Filmclip in de fase. Dit maakt de Worms klikbaar.

 private final function prepareWorms (): void for (var i: int = 0; i < 8; i++)  /* Add Mouse Listeners */ holes[i].addEventListener(MouseEvent.MOUSE_DOWN, wormHit);

Stap 32: Stop gaten MovieClip

Als het gat Filmclip heeft meer dan één frame, het moet worden gestopt om te voorkomen dat alle wormen tegelijkertijd worden weergegeven.

 / * Wormen stoppen bij frame 1 * / holes [i] .gotoAndStop (1);  startTimer (); 

Stap 33: start de timer

Deze timer start het aftellen en maakt Wormen verschijnen willekeurig in het werkgebied.

 private finale functie startTimer (): void timer.addEventListener (TimerEvent.TIMER, showWorm); timer.start (); 

Stap 35: Controleer of klaar

Deze code controleert of de weergegeven wormen de limiet nog niet hebben overschreden en roept een alarm als het waar is.

 private finale functie showWorm (e: TimerEvent): void if (currentWorms == int (totalWorms)) alert ();  else var randomHole: int = Math.floor (Math.random () * 8); // Gebruikt om te berekenen welke worm zal verschijnen

Stap 36: verander slagvlakgrootte

Het geselecteerde hitgebied in de opties scherm wordt hier op elke worm gewijzigd met behulp van de schaaleigenschappen van AS3.

 holes [randomHole] .addFrameScript (1, function () holes [randomHole] .worm.hArea.scaleX = hitSize; holes [randomHole] .worm.hArea.scaleY = hitSize;);

Stap 37: stop de animatie als je klaar bent

Enkele milliseconden gaan voorbij waar de Worm zichtbaar zal zijn, wanneer de MovieClip zijn laatste frame heeft bereikt, zal hij stoppen en terugkeren naar het eerste frame.

 holes [randomHole] .addFrameScript (holes [randomHole] .totalFrames - 1, function () holes [randomHole] .gotoAndStop (1);); holes [randomHole] .play (); currentWorms ++; 

Stap 38: Sla Worm

Deze functie verwerkt wanneer er op een worm wordt geklikt, het zal in principe een geluid afspelen, de score verhogen en de worm weer verbergen.

 private eindfunctie wormHit (e: MouseEvent): void if (e.target.name == 'hArea' || e.target.name == 'worm') var hit: Hit = new Hit (); hit.play (); wormsHit ++; e.target.parent.gotoAndPlay (18); scoreTF.text = wormsHit + '/' + totalWorms; 

Stap 39: Check Worms Hit

U kunt een aangepaste bonus toevoegen als alle wormen zijn geraakt door de volgende coderegels te wijzigen.

 if (totalWorms == String (wormsHit)) alert (); 

Stap 40: Waarschuwing

Deze functie zal het spel stoppen en de uiteindelijke score onthullen, het voegt ook een muisluisteraar toe om het spel te resetten wanneer erop wordt geklikt.

 privé laatste functie alert (): void timer.stop (); var alert: AlertView = nieuwe AlertView (); alert.x = stage.stageWidth * 0.5; alert.y = stage.stageHeight * 0.5; alert.scoreTF.text = score TF.text; alert.addEventListener (MouseEvent.MOUSE_UP, restart); addChild (alert); TweenNano.from (alert, 0.6, scaleX: 0.2, scaleY: 0.2, ease: Expo.easeOut); 

Stap 41: start opnieuw op

De volgende functie laadt de swf opnieuw, herstart een variabele, methode en keer terug naar de Titelscherm.

 privé laatste functie opnieuw opstarten (e: MouseEvent): void navigateToURL (nieuwe URLRequest (stage.loaderInfo.url), '_level0'); 

Conclusie

Zoals je kunt zien, kunnen veel van de gamevariabelen / -parameters worden aangepast en aan jouw behoeften worden aangepast. Probeer je eigen versie van de game te maken!

Ik hoop dat je deze tutorial leuk vond, bedankt voor het lezen!