Bouw een eenvoudig Flash Frisbee-spel met AS3

In deze tutorial bouwen we een heel eenvoudig "keepy-uppy" -spel. Klik op de frisbee om hem skyward te sturen en draai hem dan met je muis om te voorkomen dat hij op de grond valt! Verzamel power-ups om de grootte van de schijf te veranderen.

Eindresultaat voorbeeld

Laten we eens kijken naar het eindresultaat waar we naartoe zullen werken:


Stap 1: Kort overzicht

Met behulp van vooraf gemaakte grafische elementen creëren we een goed uitziende interface die wordt aangedreven door verschillende ActionScript 3-klassen.

De gebruiker kan een personage over het podium bewegen, upgrade-items verzamelen en zwaartekracht verslaan, je kunt de waarden in de klas aanpassen om het spel aan te passen.


Stap 2: Instellingen voor Flash-document

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


Stap 3: Interface

Er wordt een kleurrijke, mooi uitziende interface weergegeven, met meerdere vormen, knoppen en meer.
De meeste afbeeldingen die we hebben gebruikt, zijn gemaakt in eerdere zelfstudies, dus het is niet nodig om hun creatie op te nemen.


Stap 4: Exemplaarnamen

De afbeelding hierboven toont de Namen van exemplaren gebruikt in de MovieClips. Degenen die met een beginnen Hoofdletter zijn Bibliotheek Class Namen en zou niet op het podium moeten staan, er zijn ook twee wolkenclips boven deze graphics, ze worden genoemd wolken en clouds2.


Stap 5: Tween Nano

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

Je kan downloaden TweenNano van zijn officiële website. Leer hier hoe je het aan je project kunt toevoegen.


Stap 6: 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 7: 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 8: 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.events.MouseEvent; import flash.events.Event; import flash.net.navigateToURL; import flash.net.URLRequest; import com.greensock.TweenNano; import com.greensock.easing.Elastic; import flash.utils.Timer; import flash.events.TimerEvent;

Stap 9: 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 firsttime: Boolean = true; private var zwaartekracht: int = 2; privé var throwSpeed: int; privé var xMouse: int; privé var xSpeed: int; privé var topHeight: int = 40; private var top: Boolean; privé var-score: int = 0; private var scoreVal: int = 1; private var timer: Timer = new Timer (10000); private var cancelBonus: Timer = new Timer (3000); upgrade van privé-var: Sprite;

Stap 10: 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 function Main (): void addGameListeners (); 

Stap 11: luisteraars toevoegen

In deze functie voegen we de aanvankelijke game-luisteraars toe die nodig zijn om het spel te starten. We hebben ook de buttonMode eigenschap van de frisbee naar true (dit toont de handcursor wanneer de muis erop staat) en verberg de positie-indicator.

 private function addGameListeners (): void frisbee.addEventListener (MouseEvent.MOUSE_UP, startFrisbee); frisbee.buttonMode = true; indicator.visible = false; 

Stap 12: Start frisbee

De eerste zet van de frisbee activeert de timers die verantwoordelijk zijn voor de upgrades en belt de bijwerken functie die de hoofdfunctie van het spel is.

 persoonlijke functie-startFrisbee (e: MouseEvent): void frisbee.removeEventListener (MouseEvent.MOUSE_UP, startFrisbee); frisbee.addEventListener (MouseEvent.MOUSE_UP, throwFrisbee); stage.addEventListener (Event.ENTER_FRAME, update); timer.addEventListener (TimerEvent.TIMER, showUpgrade); timer.start (); xSpeed ​​= 0; xMouse = frisbee.mouseX; throwSpeed ​​= 0; 

Stap 13: gooi Frisbee

Deze functie reset de variabelen die gebruikt worden om de frisbee te laten bewegen en vallen; het werkt telkens wanneer op de frisbee wordt geklikt.

 private function throwFrisbee (e: MouseEvent): void xSpeed ​​= 0; xMouse = frisbee.mouseX; throwSpeed ​​= 0; top = false; 

Stap 14: Upgradebubbels weergeven

Een getimede functie zal omgaan met de upgrade-bubbels. De timer is in de variabelenverklaring ingesteld om een ​​interval van 10 seconden te hebben. Het eerste wat u moet doen, is een vorige bubbel op het scherm controleren en deze verwijderen als deze er is.

 private function showUpgrade (e: TimerEvent): void / * Verwijder vorige sprite * / if (upgrade! = null) removeChild (upgrade); upgrade = null; 

Stap 15: Upgrade van dubbele punten

De upgrades zijn bubbels die op het scherm verschijnen en die de speler speciale vaardigheden of verbeteringen zullen geven.

De volgende code berekent een willekeurig getal (dit kan 0 of 1 zijn) en geeft een instantisatie van de dubbele upgrade als het cijfer 0 is.

 var randomNumber: int = Math.floor (Math.random () * 2); if (randomNumber == 0) upgrade = new Double (); upgrade.name = 'd'; 

Stap 16: Big Frisbee Upgrade

Als het berekende cijfer 1 is, wordt de grote frisbee-upgrade toegevoegd aan de etappe. Er wordt een naam gegeven aan de upgrades om te bepalen of de waarde is wanneer deze wordt geraakt.

 else upgrade = new Big (); upgrade.name = 'b';  upgrade.x = Math.floor (Math.random () * stage.stageWidth); // geef een willekeurige x-positie addChild (upgrade);

Stap 17: Upgrades annuleren

Een andere getimede functie.

Dit wordt gebeld wanneer de speler grijpers de upgrade-bubble, 3 seconden tellen om het upgrade-effect te beëindigen.

 privéfunctie cancelUpgrade (e: TimerEvent): void cancelBonus.stop (); cancelBonus.removeEventListener (TimerEvent.TIMER, cancelUpgrade); scoreVal = 1; // annuleer dubbele punten scoreTF.textColor = 0xffffff; frisbee.scaleX = 1; // Return Scale to normale frisbee.scaleY = 1; 

Stap 18: Update-functie

De hoofdfunctie van het spel is het omgaan met de wanden, upgrades en de beweging van de frisbee in elk frame. Omdat het zo'n belangrijke en uitgebreide functie is, zullen we het in het volgende deel van deze spelhandleiding bekijken.

 persoonlijke functie-update (e: Event): void 

Stap 19: Documentklasse

Voeg de klassenaam toe aan de Klasse veld in de Publiceren deel van de eigenschappen panel om de FLA te koppelen aan de hoofddocumentklasse.


Stap 20: Update-functie

De belangrijkste functie van het spel, het zal omgaan met botsingen met de muren, upgrades en de frisbee beweging elk frame, leren hoe het werkt in de volgende stappen.

 update van privé-finale functie (e: Event): void 

Stap 21: verplaats frisbee

De frisbee wordt verplaatst met de throwSpeed-waarde. Deze waarde zal later in de code veranderen om de frisbee omhoog te laten gaan, wanneer deze variabele 0 is, zal de zwaartekracht naar beneden bewegen naar de frisbee.

 frisbee.y - = throwSpeed;

Stap 22: zwaartekracht

De volgende code controleert of de frisbee het hoogste toegestane punt heeft bereikt, anders neemt de variabele throwSpeed ​​toe om hoger te gaan. Tegelijkertijd wordt de zwaartekracht op de variabele toegepast, waardoor deze uiteindelijk zijn positieve waarde verliest en de frisbee valt.

 if (throwSpeed> = topHeight) top = true;  if (throwSpeed < topHeight && !top)  throwSpeed += 5;  if(throwSpeed <= 0)  throwSpeed = 0;  throwSpeed -= gravity; frisbee.y += gravity * 3;

Stap 23: Klik op Positie

De x-beweging van de frisbee wordt berekend op basis van het gebied waar de speler op klikt.

 if (xMouse < frisbee.width * 0.5)  frisbee.x += xSpeed; //click the left side, so move it right  if(xMouse > frisbee.width * 0.5) frisbee.x - = xSpeed; // klik aan de rechterkant, dus verplaats deze naar links

Stap 24: Verklein x snelheid

xSpeed ​​is de waarde waardoor de frisbee naar links of rechts beweegt.

Deze code vertraagt ​​deze beweging door de waarde ervan af te trekken totdat de maximale hoogte is bereikt.

 if (xSpeed < topHeight * 0.01 && !top)  xSpeed += 1;  if(xSpeed <= 0)  xSpeed = 0; 

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


Stap 25: Rotatie

Om de beweging van de frisbee te simuleren, roteren we de een letter erin. (Dit is een filmclip in de Frisbee-filmclip, die een instantienaam van een brief.)

 frisbee.aLetter.rotationZ + = 50;

Stap 26: Score

De score neemt toe als de frisbee het podium verlaat en tegen de tijd dat het onzichtbaar is voor de speler. Als je dichter bij de top klikt, zal de behaalde score hoger zijn.

 if (frisbee.y < 0)  score += scoreVal; scoreTF.text = String(score);

Stap 27: positie-indicator

Deze indicator volgt de x-positie van de frisbee terwijl deze zich niet in fase bevindt.

 indicator.visible = true; indicator.x = frisbee.x + (frisbee.width * 0.5);

Stap 28: Achtergrond verplaatsen

De volgende code verplaatst de initiële achtergrond (als deze niet is verwijderd) en de wolken die opnieuw zullen worden gebruikt in het spel.

 if (bg! = null) bg.y + = throwSpeed; clouds.y + = throwSpeed; clouds2.y + = throwSpeed; 

Stap 29: oorspronkelijke achtergrond verwijderen

De eerste achtergrond verschijnt alleen aan het begin van het spel, dus het wordt verwijderd als de speler het niet langer kan zien.

 if (bg! = null && bg.y> stage.stageHeight) removeChild (bg); bg = null; 

Stap 30: Loop Clouds

De wolkenachtergronden verschijnen tijdens de duur van het spel altijd. Wanneer een achtergrond niet langer zichtbaar is, wordt de positie gereset.

 if (clouds.y> stage.stageHeight) clouds.y = -280;  if (clouds2.y> stage.stageHeight) clouds2.y = -280; 

Laten we nog een keer stoppen om een ​​snelle test uit te voeren en ervoor te zorgen dat we score, indicator, rotatie, looping clouds en upgrades hebben (hoewel ze nog niets doen?):

я


Stap 31: dubbele punten

Dubbele punten worden toegevoegd aan de score wanneer de 2x upgrade is actief, we veranderen ook de score tekstveldkleur om de wijziging beter zichtbaar te maken.

 if (upgrade! = null && frisbee.hitTestObject (upgrade) && upgrade.name == 'd') removeChild (upgrade); upgrade = null; scoreVal = 2; scoreTF.textColor = 0xf3ba35; cancelBonus.addEventListener (TimerEvent.TIMER, cancelUpgrade); cancelBonus.start (); 

Stap 32: Big Frisbee

Wanneer de speler de groot bellen, de schaal van de frisbee wordt met 1 verhoogd, waardoor u gemakkelijker kunt klikken.

 if (upgrade! = null && frisbee.hitTestObject (upgrade) && upgrade.name == 'b') removeChild (upgrade); upgrade = null; frisbee.scaleX = 2; frisbee.scaleY = 2;

Stap 33: Upgrades annuleren

De huidige upgrade is slechts 3 seconden actief en als die tijd verstrijkt, worden de bevoegdheden ervan geannuleerd.

 cancelBonus.addEventListener (TimerEvent.TIMER, cancelUpgrade); cancelBonus.start ();

Stap 34: Moeilijkheidsgraad

De moeilijkheid van het spel is de zwaartekracht, deze code verandert de zwaartekracht op basis van de score. Wanneer de score 100 bereikt, neemt de zwaartekracht toe met 0,5.

 if (score> = 100 && score < 102)  gravity += 0.5; 

Stap 35: Schermranden

Onzichtbare wanden worden aan de zijkanten gebruikt om te voorkomen dat de frisbee buiten de arena valt.

 if (frisbee.x <= 0)//Left  frisbee.x = 0;  else if(frisbee.x >= (stage.stageWidth - frisbee.width)) // Right frisbee.x = (stage.stageWidth - frisbee.width); 

Stap 36: Spel voorbij

Als de frisbee helemaal naar beneden valt, is het spel afgelopen.

 if (frisbee.y> stage.stageHeight) gameOver (); 

Stap 37: luisteraars verwijderen

De volgende code schakelt alle muisgebeurtenissen uit en stopt de timer, dit voorkomt dat het spel ongewenste activiteiten uitvoert.

 private final-functie gameOver (): void frisbee.removeEventListener (MouseEvent.MOUSE_UP, throwFrisbee); stage.removeEventListener (Event.ENTER_FRAME, update); timer.stop (); timer.removeEventListener (TimerEvent.TIMER, showUpgrade);

Stap 38: Alert

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.

 var alert: AlertView = nieuwe AlertView (); alert.buttonMode = true; 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.7, y: -alert.height, ease: Elastic.easeOut); 

Stap 39: start opnieuw op

De volgende functie laadt de swf opnieuw, start een variabele opnieuw, methode en keert terug naar het eerste scherm.

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

Werden gedaan! Probeer het:


Conclusie

Je hebt een heel leuk spel gemaakt, probeer je eigen functies en afbeeldingen toe te voegen.

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