Flash-games zijn heel erg het brood en de boter van de indie pop-nerd-cultuur. Als je de sneetjes brood het menu en de game zelf overweegt, wat blijft dan over? De boter - juist die substantie die het brood doet smaken, dat is veel lekkerder. En wat betreft een Flash-spel, wat er tussen menu's en games zit, zijn de overgangen!
Dit is een voorbeeldpatroon van het overgangseffect waar we naartoe zullen werken:
Normaal moeten we een nieuw Flash-bestand maken (ActionScript 3.0). Stel de breedte in op 400 px, de hoogte op 200 px en de framesnelheid op 30 fps. De achtergrondkleur kan als standaard worden overgelaten. Sla het bestand op; het kan worden genoemd wat je wilt. Ik heb de mijne genoemd Transitions.fla.
Vervolgens moeten we een documentklasse maken. Ga naar de eigenschappen van je Flash-bestand en stel zijn klasse in Transitions
. Maak vervolgens de documentklasse:
pakket import flash.display. *; import flash.events. *; public class Transitions breidt MovieClip uit static public var val: Number = new Number (); static public var transitionAttached: Boolean = new Boolean (); openbare functie Overgangen () val = 0; transitionAttached = false;
De code heeft zojuist twee variabelen geïntroduceerd. De eerste zal worden gebruikt om het patroon van het effect te selecteren, en de tweede zal worden gebruikt om te controleren of er meerdere instanties van het effect op het podium zijn.
Onze volgende stap is om de sprite te maken die wordt gebruikt als elk vierkant voor de overgang. Maak een nieuwe klasse en sla deze op als Square.as:
pakket import flash.display. *; import flash.events. *; public class Square breidt Sprite uit public var squareShape: Shape = new Shape (); openbare functie Vierkant ()
Wij gebruiken de vierkant
variabel om onze vorm binnen de Sprite te tekenen. Teken een rechthoek 40px bij 40px (die de volledige grootte heeft) en stel de schaal in 0.1
, een tiende van zijn grootte - dit zal ons later helpen bij het effect:
addChild (squareShape); squareShape.graphics.beginFill (0x000000,1); squareShape.graphics.drawRect (-20, -20,40,40); squareShape.graphics.endFill (); this.scaleX = 0,1; this.scaleY = 0,1;
Maak nog een nieuwe klasse voor het effect zelf. Als we klaar zijn, is het toevoegen van het effect aan de stage heel eenvoudig:
pakket import flash.display. *; import flash.events. *; import flash.utils. *; public class FadeEffect breidt Sprite uit public var currentFadeOut: int = 00; public var currentSquares: int = 01; public var pauseTime: int = 01; public var tempNum: int = 00; public var fading: String = "in"; public var fadeinTimer: Timer = new Timer (100); public var fadeoutTimer: Timer = new Timer (100); public var fadeArray: Array = [// top [[01,01,01,01,01,01,01,01,01,01], [02,02,02,02,02,02,02,02, 02,02], [03,03,03,03,03,03,03,03,03,03], [04,04,04,04,04,04,04,04,04,04], [ 05,05,05,05,05,05,05,05,05,05]], // onder [[05,05,05,05,05,05,05,05,05,05], [04 , 04,04,04,04,04,04,04,04,04], [03,03,03,03,03,03,03,03,03,03], [02,02,02,02 , 02,02,02,02,02,02], [01,01,01,01,01,01,01,01,01,01]]]; public var squaresArray: Array = new Array (); publieke functie FadeEffect ()
U denkt waarschijnlijk "dat is een heleboel variabelen, waar worden ze allemaal voor gebruikt?":
currentFadeOut
- gebruikt als een cheque voor tempNum
om te zien hoeveel vierkanten moeten worden geschaaldcurrentSquares
- de huidige waarde die aangeeft welke vierkanten moeten worden bijgevoegd en / of geschaaldpauzetijd
- een eenvoudig geheel getal om een korte pauze tussen overgangen te geven en zichzelf te verwijderentempNum
- gebruikt om te controleren welke nummers in de array moeten worden geschaaldvervagen
- een string om te controleren of de overgang in- of uitfadenfadeinTimer
- een timer die wordt aangeroepen om het vervagen van de huidige waarde van currentSquares te startenfadeoutTimer
- een andere timer die wordt aangeroepen om het vervagen van de huidige waarde van currentSquares te startenfadeArray
- de 3D-array die alle overgangspatronen bevatsquaresArray
- een array voor de Square spritesOns effect begint met het starten van een gebeurtenislistener fadeInTimer
en het starten. We moeten ook een gebeurtenislistener toevoegen om continu alle sprites in de juiste grootte te schalen. Gebruik de volgende code in de constructor:
fadeinTimer.addEventListener ("timer", fadeSquaresInTimer); fadeinTimer.start (); addEventListener (Event.ENTER_FRAME, enterFrame);
De volgende stap is om die twee gebeurtenislisteners te maken. We zullen beginnen met de gemakkelijkere van de twee, de enterFrame
functie:
openbare functie enterFrame (e: Event) voor elke (var s1 in squaresArray) tempNum + = 1; if (fading == "in") if (s1.scaleX<=1) s1.scaleX+=0.05; s1.scaleY+=0.05; else if(fading=="out") if(tempNum<=currentFadeOut) if(s1.scaleX>= 0,1) s1.scaleX- = 0,05; s1.scaleY- = 0,05; else if (s1.visible == true) s1.visible = false; tempNum = 00;
Het is misschien niet helemaal logisch nu, maar dit moet helpen om wat licht te werpen.
s1
is de instantienaam die aan de vierkanten wordt gegeven wanneer we ze in een latere functie maken.squaresArray
om het aantal ervan bij te houden en we voeren dezelfde bewerking uit voor elk object in de array.tempNum
(gebruikt in de fading out if-statement) die wordt gebruikt om de sqaures te schalen in de volgorde waarin ze aan de array zijn toegevoegd. Dit betekent dat het niet patroonafhankelijk is en met elk patroon werkt.Daarna…
vervagen
is waar of niet.currentFadeOut
(dit zijn degenen die moeten worden geschaald, alle anderen moeten op volledige schaal blijven totdat de waarde toeneemt).Het is tijd om de gebeurtenislistener voor de timer toe te voegen:
openbare functie fadeSquaresInTimer (e: Event) fadeSquaresIn (fadeArray [Transitions.val]); currentSquares + = 1;
Op het eerste gezicht lijkt het minder ingewikkeld, maar je zou moeten opmerken dat we een functie bij de fadeArray
als de parameter. Welk patroon wordt geselecteerd uit de array hangt af van wat u instelt val
gelijk aan in de klasse Overgangen; nu zou het het eerste patroon moeten gebruiken omdat val
is ingesteld op 0.
De volgende stap is het maken van de fadeSquaresIn
functie die wordt aangeroepen vanuit de vorige timer:
openbare functie fadeSquaresIn (s: Array) for (var row = 0; rowHet eerste dat we bereiken is het herhalen van het geselecteerde patroon. We beginnen bij rij 1, kolom 1 en fietsen door elke kolom totdat het einde van de rij is bereikt. Daarna gaan we naar de volgende rij en herhalen we het proces.
Het volgende dat u moet doen, is het huidige item in de array vergelijken met de waarde van
currentSquares
:if (int (s [col] [row]) == currentSquares)Als ze gelijkwaardig zijn, voegen we een vierkant toe, positioneren het dienovereenkomstig en drukken het op de
squaresArray
zodat het geschaald kan worden:var s1: Sprite = nieuw Vierkant (); s1.x = 20+ (rij * 40); s1.y = 20+ (col * 40); addChild (s1); squaresArray.push (s1);We zijn bijna klaar met deze functie, we hoeven alleen maar een controle uit te voeren wanneer er hetzelfde aantal vierkanten is als er items in het patroon zijn. We doen dit door de volgende if-statement buiten beide for-loops toe te voegen:
if (squaresArray.length == (s [0] .length * s.length)) fadeinTimer.stop (); addEventListener (Event.ENTER_FRAME, pauseTween);Spreekt voor zich - we stopten de timer en noemden een gebeurtenislistener voor de pauze tussen vervagen en vervagen. Die functie wordt gebruikt om de vervaging te initiëren en kan ook worden gebruikt om verandering in je spel te veroorzaken:
openbare functie pauzeTussen (e: evenement) pauseTime + = 1; if (pauseTime == 60) currentSquares = 01; fading = "uit"; fadeoutTimer.addEventListener ("timer", fadeSquaresOutTimer); fadeoutTimer.start (); removeEventListener (Event.ENTER_FRAME, pauseTween);We zullen niet veel tijd aan deze functie besteden vanwege zijn eenvoud. Hier verhogen we de waarde van
pauzetijd
, en als het eenmaal gelijk is aan 60 (wat betekent dat er twee seconden voorbij zijn gegaan), stellen we de waarde in opcurrentSquares
terug naar 1, instellenvervagen
naar"uit"
zodat de vierkanten achterwaarts kunnen schalen, verwijder de luisteraar voorpauseBetween ()
zelf en voeg een gebeurtenislistener toe voor deze nieuwe functie:openbare functie fadeSquaresOutTimer (e: Event) fadeSquaresOut (fadeArray [Transitions.val]); currentSquares + = 1;Dit werkt veel als
fadeSquaresInTimer ()
, hoewel we deze keer de functie noemenfadeSquaresOut ()
:openbare functie fadeSquaresOut (s: Array) for (var row = 0; rowWe fietsen er doorheen, maar deze keer dat we een equivalent item vinden, verhogen we de waarde van
currentFadeOut
zodat het volgende item in desquaresArray
kan beginnen te vervagen.Bijna klaar nu; alles wat er nog over is, is om de timer te stoppen en het effect te verwijderen. Voeg deze if-statement toe buiten de twee for-loops:
if (currentFadeOut == (s [0] .length * s.length)) fadeoutTimer.stop (); pauseTime = 01; addEventListener (Event.ENTER_FRAME, delayedRemove);Hiermee wordt gecontroleerd of alle items zijn begonnen met vervagen. Als dat zo is, stopt het de timer, ingesteld
pauzetijd
terug naar 1 en voegt een gebeurtenislistener voor de functie toedelayedRemove ()
:public function delayedRemove (e: Event) pauseTime + = 1; if (pauseTime == 30) Transitions.transitionAttached = false; removeEventListener (Event.ENTER_FRAME, delayedRemove); stage.removeChild (deze);Zoals eerder verhogen we de waarde van
pauzetijd
, en als het eenmaal gelijk is aan 30 (1 seconde), stellen we de boolean in opvals
zodat het effect nog een keer kan worden toegevoegd. We verwijderen deze gebeurtenislistener en we verwijderen dit effect van het toneel.
Stap 4: Het effect toevoegen
Nu komt het makkelijke gedeelte. Voeg de volgende code toe aan de constructor van de documentklasse om het effect toe te voegen:
if (transitionAttached == false) transitionAttached = true; var f1: Sprite = new FadeEffect; stage.addChild (f1);
Stap 5: Meer patronen maken
Voel je vrij om je eigen patronen te maken! Het is buitengewoon eenvoudig, maak gewoon een nieuwe 2D-array in de 3D-array. Hier is de array die ik heb gemaakt (vervang gewoon je 3D-array). Het bevat 8 verschillende overgangen:
[// top [[01,01,01,01,01,01,01,01,01,01], [02,02,02,02,02,02,02,02,02,02], [ 03,03,03,03,03,03,03,03,03,03], [04,04,04,04,04,04,04,04,04,04], [05,05,05, 05,05,05,05,05,05,05]], // onder [[05,05,05,05,05,05,05,05,05,05], [04,04,04,04 , 04,04,04,04,04,04], [03,03,03,03,03,03,03,03,03,03], [02,02,02,02,02,02,02 , 02,02,02], [01,01,01,01,01,01,01,01,01,01]], // links [[01,02,03,04,05,06,07, 08,09,10], [01,02,03,04,05,06,07,08,09,10], [01,02,03,04,05,06,07,08,09,10] , [01,02,03,04,05,06,07,08,09,10], [01,02,03,04,05,06,07,08,09,10]], // right [ [10,09,08,07,06,05,04,03,02,01], [10,09,08,07,06,05,04,03,02,01], [10,09,08 , 07,06,05,04,03,02,01], [10,09,08,07,06,05,04,03,02,01], [10,09,08,07,06,05 , 04,03,02,01]], // van links [[01,02,03,04,05,06,07,08,09,10], [02,03,04,05,06, 07,08,09,10,11], [03,04,05,06,07,08,09,10,11,12], [04,05,06,07,08,09,10,11, 12,13], [05,06,07,08,09,10,11,12,13,14]], // rechtsboven [[10,09,08,07,06,05,04,03 , 02,01], [11,10,09,08,07,06,05,04,03,02], [12,11,10,09,08,07,06,05,04,03], [13,12,11,1 0,09,08,07,06,05,04], [14,13,12,11,10,09,08,07,06,05]], // onder links [[05,06,07 , 08,09,10,11,12,13,14], [04,05,06,07,08,09,10,11,12,13], [03,04,05,06,07,08 , 09,10,11,12], [02,03,04,05,06,07,08,09,10,11], [01,02,03,04,05,06,07,08,09 , 10]], // bottom-right [[14,13,12,11,10,09,08,07,06,05], [13,12,11,10,09,08,07,06, 05,04], [12,11,10,09,08,07,06,05,04,03], [11,10,09,08,07,06,05,03,03,02], [ 10,09,08,07,06,05,04,03,02,01]]];U kunt de waarde van wijzigen
Transitions.val
om een ander patroon te kiezen - bijvoorbeeld, alsval
is3
, de overgang komt van rechts.
Conclusie
Bedankt dat je de tijd hebt genomen om deze tutorial te lezen. Als u vragen heeft, kunt u hieronder een reactie achterlaten. En als je een uitdaging wilt, probeer dan het effect met één patroon te laten vervagen en uit te faden met een tegengesteld patroon.