Tenk på kommandoer Del 2 av 2

Under denne opplæringen vil vi videre utvide kommandorammen fra første del. Vi lager et rammeverk for scenehåndtering, med lettforståelig og vedlikeholdbar kode.


Endelig resultatforhåndsvisning

La oss se på det endelige resultatet vi skal jobbe for:


Scenehåndtering

En rimelig tilnærming til å bryte en komplett Flash-applikasjon i mindre stykker er å administrere den som separate scener. Flash IDE lar deg utføre scenehåndtering uten å skrive noen kode, men vi kommer til å nærme seg ting helt annerledes. Vi vil skape vårt eget scenestyringsramme.

I våre scenestyringsrammer ser vi scener som de minste byggesteinene for en komplett Flash-applikasjon. Hver scene består av en intro kommando og an outro kommando. En intro-kommando initierer alt du trenger for en scene, for eksempel å legge til en logo i visningslisten over containerens sprite. En outro-kommando gjør det motsatte, for eksempel å fjerne logoen fra beholderens sprite. Du kan se overgang fra en scene til en annen som outro-kommandoen til den første scenen etterfulgt av intro-kommandoen til den andre. På denne måten kan vi sette scener sammen og håndtere overgangene deres veldig enkelt.

Ta en titt på denne figuren. En scene er akkurat som et stykke av et puslespill; den venstre enden representerer intro-kommandoen, og den høyre enden er utro-kommandoen.

Å gjøre en overgang fra scene A til scene B er akkurat som å knytte de to stykkene sammen. Outro-kommandoen til scene A utføres først, intro-kommandoen til scene B utføres neste, så er scenen overgang fullført.

Det er egentlig det samme konseptet å utføre en overgang fra scene A til scene C. Vi må bare sette puslespillene A og C sammen, i stedet for A og B.


Opprette noen flere kommandoer

Før vi begynner å bygge scenestyringsrammen, la oss først lage noen flere kommandoklasser som senere blir brukt i denne opplæringen. Du kan bare fokusere på overstyrte utfør () metoder for følgende kommandoklasser, som er den viktigste delen av disse klassene.


GreenSock Tweening kommandoer

Uten tvil er GreenSock Tweening Platform en av de beste open-source tweening rammer der ute. Sceneoverganger involverer vanligvis mange tweenings, og GreenSock Tweening Platform har alltid vært mitt førstevalg når det gjelder å skape tweens. Vi skal inkapslere dette rammeverket i kommandoklasser for å integrere det med vårt kommandoramme. Last ned TweenMax-biblioteket, og installer det.

Vi bruker metodene til () og fra () fra TweenMax-klassen. TweenMax-klassen gir en måte å håndtere ferdigstillelse av en tween ved å påkalle en funksjon referert av den valgfrie "onComplete" -egenskapen i "vars" -parameteren. Vi tilordner kommandoen komplette () -metoden til denne egenskapen, så hele () -metoden er påkalt når tween er ferdig. Nedenfor er koden for kommandoene innkapsling disse to metodene. Opprett en ny katalog kalt "greensock" i "Commands" -katalogen du opprettet i første del av denne opplæringen, og lagre disse klassene som henholdsvis TweenMaxTo.as og TweenMaxFrom.as.

 pakke kommandoer.greensock import com.greensock.TweenMax; importere kommandoer.kommando; // denne kommandoen encapsulates TweenMax.to () metoden offentlig klasse TweenMaxTo utvider kommando public var target: Object; offentlig var varighet: tall; offentlig var vars: Objekt; offentlig funksjon TweenMaxTo (mål: Objekt, varighet: Nummer, vars: Objekt) this.target = target; this.duration = varighet; this.vars = vars;  overstyr beskyttet funksjon utfør (): void // fortell TweenMax for å påkalle kommandoen fullstendig () metoden når tweening er ferdig vars.onComplete = complete; TweenMax.to (mål, varighet, vars); 
 pakke kommandoer.greensock import com.greensock.TweenMax; importere kommandoer.kommando; // denne kommandoen encapsulates TweenMax.from () metoden offentlig klasse TweenMaxFrom utvider kommando public var target: Object; offentlig var varighet: tall; offentlig var vars: Objekt; offentlig funksjon TweenMaxFrom (mål: Objekt, varighet: Nummer, vars: Objekt) this.target = target; this.duration = varighet; this.vars = vars;  overstyr beskyttet funksjon utfør (): void // fortell TweenMax for å påkalle kommandoen fullstendig () metoden når tweening er ferdig vars.onComplete = complete; TweenMax.from (mål, varighet, vars); 

(Husk å lese min introduksjon til kommandoer hvis du trenger å oppdatere minnet ditt.)

TweenMaxTo vil mellom målobjektet fra sin nåværende posisjon (eller uskarphet eller alfa eller ...) til den nye posisjonen (etc) som du angir med vars-objektet. TweenMaxFrom gjør det motsatte.

Hvis du er kjent nok med GreenSock Tweening Platform, kan du også inkapslere TweenLite og TweenNano klassene for å dekke dine behov.


Vis objektholderkommandoer

Som tidligere nevnt kan intro og outro av en scene med stor sannsynlighet innebære å legge til visningsobjekter i en visningsobjektbeholder og fjerne gjenstandene fra beholderen. Så her la oss inkapslere addChild () og removeChild () metodene i kommandoer.

 pakke kommandoer.display import commands.Command; importer flash.display.DisplayObject; importer flash.display.DisplayObjectContainer; // Denne kommandoen encapsulates addChild () metoden offentlig klasse AddChild utvider kommando public var container: DisplayObjectContainer; offentlig var displayObject: DisplayObject offentlig funksjon AddChild (container: DisplayObjectContainer, displayObject: DisplayObject) this.container = container; this.displayObject = displayObject;  overstyr beskyttet funksjon utfør (): void container.addChild (displayObject); fullstendig(); 
 pakke kommandoer.display import commands.Command; importer flash.display.DisplayObject; importer flash.display.DisplayObjectContainer; // Denne kommandoen encapsulates removeChild () metoden offentlig klasse RemoveChild utvider kommando public var container: DisplayObjectContainer; offentlig var displayObject: DisplayObject offentlig funksjon RemoveChild (container: DisplayObjectContainer, displayObject: DisplayObject) this.container = container; this.displayObject = displayObject;  overstyr beskyttet funksjon utfør (): void container.removeChild (displayObject); fullstendig(); 

Hendelseslistekommandoer

Vi vil også bruke kommandoer til å håndtere tilføyelse og fjerning av hendelseslyttere, så la oss inkapslere addEventListener () og removeEventListener () metoder.

 pakke kommandoer.events import kommandoer.kommando; importer flash.events.IEventDispatcher; // denne kommandoen encapsulates addEventListener () metoden offentlig klasse AddEventListener utvider kommando public var dispatcher: IEventDispatcher; offentlig var type: streng; offentlig var lytter: Funksjon; offentlig funksjon AddEventListener (dispatcher: IEventDispatcher, type: String, lytter: Funksjon) this.dispatcher = dispatcher; this.type = type; this.listener = lytteren;  overstyre beskyttet funksjon utfør (): void dispatcher.addEventListener (type, lytter); fullstendig(); 
 pakke kommandoer.events import kommandoer.kommando; importer flash.events.IEventDispatcher; // denne kommandoen encapsulates removeEventListener () metoden offentlig klasse RemoveEventListener utvider kommando public var dispatcher: IEventDispatcher; offentlig var type: streng; offentlig var lytter: Funksjon; offentlig funksjon RemoveEventListener (dispatcher: IEventDispatcher, type: String, lytter: Funksjon) this.dispatcher = dispatcher; this.type = type; this.listener = lytteren;  overstyr beskyttet funksjon utfør (): void dispatcher.removeEventListener (type, lytter); fullstendig(); 

Utility Commands

Til slutt trenger vi noen verktøykommandoer for å gjøre tingene enklere. SetProperties-kommandoen angir en objekts egenskaper fra et annet objekts eiendomsverdier:

 pakke kommandoer.utils import kommandoer.kommando; // Denne kommandoen setter egenskapene til en objekt på en rask og praktisk måte. Public Class SetProperties utvider kommando public var target: Object; offentlige varegenskaper: Objekt; offentlig funksjon SetProperties (mål: Objekt, egenskaper: Objekt) this.target = target; this.properties = egenskaper;  overstyr beskyttet funksjon utfør (): void for (var-nøkkel: String i egenskaper) mål [nøkkel] = egenskaper [nøkkel];  fullfør (); 

Vi kan bruke det slik:

var setProperties: SetProperties = new SetProperties (mål, x: 100, y: 230);

... og det vil sette objektets x- og y-egenskaper til de angitte verdiene.

Dummy-kommandoen gjør ingenting og fullfører kommandoen. Formålet med denne kommandoen er å tjene som en "plassholder" og skal bli klar senere:

 pakke kommandoer.utils import kommandoer.kommando; // denne kommandoen gjør ingenting og fullfører seg ved utførelse offentlig klasse Dummy utvider kommando offentlig funksjon Dummy ()  overstyre beskyttet funksjon utfør (): void complete (); 

Vent-kommandoen venter på en spesifisert mengde forsinkelsestid, og fullfører deretter kommandoen uten å gjøre noe:

 pakke kommandoer.utils import kommandoer.kommando; offentlig klasse Vent forlenger kommando offentlig funksjon Vent (forsinkelse: tall = 0) super (forsinkelse);  overstyr beskyttet funksjon utfør (): void complete (); 

Du lurer kanskje på hvorfor vi trenger en kommando som bare tar seg tid hvis vi allerede har en "forsinkelse" -konstruktørparameter i basen Command-klassen. Noen ganger ønsker vi å designe konstruktører til å bare ha parametere som virkelig har noe å gjøre med kommandoenes spesifikke funksjonalitet, og inkludere "forsinkelsestiden", da en parameter blant dem er å forstyrre "uniformiteten" når det gjelder parameterformål. Så i stedet for å skrive koden under:

 Ny SerialCommand (0, ny SomeFancyCommand (delay1, fancyParam11, fancyParam12, fancyParam31), ny SomeFancyCommand (delay2, fancyParam21, fancyParam22, fancyParam23));

Vi kunne skrive noe slikt:

 Ny SerialCommand (0, New Wait (delay1), new SomeFancyCommand (fancyParam11, fancyParam12, fancyParam31), ny ventetid (delay2), new SomeFancyCommand (fancyParam21, fancyParam22, fancyParam23));

Parametrene "forsinkelse" trenger ikke lenger unødvendig øynene i SomeFancyCommand-konstruktørene. De har nå blitt flyttet til ventekommandoene for å gjøre ting renere.


Scenestyringsrammen

Her er vår sceneklasse, som representerer et enkelt "puslespill". Hva hver metode gjør er forklart i kommentarene. Denne klassen er ganske mye en "skjelett" klasse, siden hver metode enten skaper en dummy kommando eller gjør ingenting. For å få ting saftigere må disse metodene overstyres. Opprett en ny "scenes" -katalog i prosjektets kildemappe for å lagre disse nye klassene:

 pakke scener Import Commands.Command; importere kommandoer.utils.Dummy; // denne klassen representerer en scene for en komplett Flash-applikasjon offentlig klasse Scene // en referanse til scene manager som eier denne scenen intern var _sceneManager: SceneManager; beskyttet sluttfunksjon få sceneManager (): SceneManager return _sceneManager;  // lager introkommandoen til denne scenen offentlig funksjon createIntroCommand (): Command return new Dummy ();  // oppretter kommandoen outro på denne scenen offentlig funksjon createOutroCommand (): Command return new Dummy ();  // håndtere scene-relaterte ting her når scenen er satt offentlig funksjon onSceneSet (): void 

Og her er SceneManager-klassen som håndterer sceneoverganger, detaljer forklares også i kommentarene. Legg merke til at jeg har lagt til en "dummy-proof variabel" for å beskytte overganger fra å bli brutt ved tidlig tilkalling til setScene () metoden.

 pakke scener Import Commands.Command; importere flash.events.Event; // denne klassen håndterer sceneoverganger offentlig klasse SceneManager // en referanse til gjeldende scene private var _currentScene: Scene; // en referanse til målstedet for en overgang privat var _targetScene: Scene; // dummy-proof variabel private var _isInTransition: Boolean = false; offentlig funksjon SceneManager ()  offentlig funksjon setScene (scene: Scene): void // hvis en overgang ikke er ferdig, ignorer fremgangsmåten påkalling hvis (_isInTransition) returnerer; _targetScene = scene; // slå på den dummy-sikre varianten _isInTransition = true; // Sjekk om en scene allerede er tildelt scenestyreren hvis (_currentScene) // hvis ja, start utro av gjeldende scene først var outroCommand: Command = _currentScene.createOutroCommand (); // og lytt etter den komplette hendelsen til Outro-kommandoen outroCommand.addEventListener (Event.COMPLETE, onCurrentOutroComplete); outroCommand.start ();  ellers // hvis ikke, start introen til målscenen gotoTargetScene ();  // påkrevd når outro-kommandoen til den aktuelle scenen er fullstendig privat funksjon onCurrentOutroComplete (e: Event): void Command (e.target) .removeEventListener (Event.COMPLETE, onCurrentOutroComplete); gotoTargetScene ();  privat funksjon gotoTargetScene (): void // angi scene manager referanse av målscenen til denne _targetScene._sceneManager = dette; var introCommand: Command = _targetScene.createIntroCommand (); // lytt etter den komplette hendelsen til intro-kommandoen til målscenen introCommand.addEventListener (Event.COMPLETE, onTargetIntroComplete); introCommand.start ();  // påberopes når introkommandoen til målscenen er fullstendig privat funksjon onTargetIntroComplete (e: Event): void Command (e.target) .removeEventListener (Event.COMPLETE, onTargetIntroComplete); // fjern sceneregistreringsreferansen fra forrige scene hvis (_currentScene) _currentScene._sceneManager = null; // angi målscenen som gjeldende scene _currentScene = _targetScene; // slå av den dummy-sikre varianten _isInTransition = false; // og påkall onSceneSet () metoden _currentScene.onSceneSet (); 

Greit. Alt er satt og vi er klare til å gå. Det er på tide å skape en faktisk applikasjon med rammen vi har bygget.


Trinn 1: Lag et Flash-dokument

Åpne Flash IDE og opprett et nytt Flash-dokument. Navngi det "SceneTransitions" og opprett en dokumentklasse med samme navn. Du kan også plassere en bakgrunn på scenen hvis du vil.


Trinn 2: Opprett Introtekst

Opprett 4 symboler med tekst og navn dem i henhold til følgende bilde. Gjennom dette eksemplet eksporterer du hvert symbol for ActionScript med et klassenavn som er det samme som dets symbolnavn.


Trinn 3: Opprett scene 1

Opprett symboler og navn dem som vist i bildet nedenfor. Oppsett også deres forekomster og navn dem som vist. Velg alle forekomster og konverter dem, som en gruppe, til et annet symbol, kalt "Scene1Sprite." Du kan da slette Scene1Sprite fra scenen (men ikke fra biblioteket).


Trinn 4: Opprett scene 2

Gjør nøyaktig det samme som forrige trinn, men denne gangen velger du alle forekomster og konverterer dem til et symbol som heter "Scene2Sprite."


Trinn 5: Dokumentklassen

Dokumentklassen er overraskende enkel. Bare opprett en scene manager og fortelle lederen å sette den aktuelle scenen til en intro scene.

 pakke import flash.display.Sprite; importere scener.SceneManager; offentlig klasse SceneTransitions utvider Sprite offentlig funksjon SceneTransitions () var sceneManager: SceneManager = new SceneManager (); sceneManager.setScene (ny IntroScene (dette)); 

Trinn 6: Opprett Intro-scenen

Den første scenen vi setter til scenelederen er en intro scene. Som navnet antyder, er denne scenen bare en intro til hovedspillet vårt (i stedet for å være introdelen av hovedspillets "puslespill"). Intro-kommandoen (opprettet fra overstyringen createIntroCommand () -metoden) på denne introscenen beveger forekomster av symboler til sentrum av scenen (ved SetProperties-kommandoen), legger dem til beholderen, tweens dem fra nullskala til 100% skala, og blurs dem ut til null alpha, en etter hverandre. Dette oppnås ved å koble alle separate kommandoer sammen med en enkelt seriekommando (som du bør huske fra del 1).

Når intro-kommandoen er fullført, er onSceneSet () -metoden påkalt, og på dette tidspunktet er egenskapen sceneManager tilgjengelig, og setScene () -metoden kan påberopes for å bytte scene. I metoden onSceneSet () blir scenemanagerens setScene () -metode pålagt å skifte til Scene1 (en klasse vi skal lage i neste trinn). Da vi ikke tilsidesatte CreateOutroCommand (), er Outro-kommandoen på introscenen en dummy-kommando, noe som ikke gjør noe.

 pakke import kommandoer.kommando; importere kommandoer.display.AddChild; importere kommandoer.display.RemoveChild; importere kommandoer.greensock.TweenMaxFrom; importere kommandoer.greensock.TweenMaxTo; importere kommandoer.scenes.SetScene; importere kommandoer.SerialCommand; importere kommandoer.utils.SetProperties; importer flash.display.DisplayObject; importer flash.display.Sprite; importer flash.filters.BlurFilter; importere scener.Scene; offentlig klasse IntroScene utvider Scene // konstante parametere privat statisk const ZOOM_IN_TIME: Number = 0.2; privat statisk const HOLD_TIME: Number = 0.3; privat statisk const BLUR_OUT_TIME: Nummer = 0,2; privat statisk const BLUR_AMOUNT: Nummer = 20; privat var container: Sprite; offentlig funksjon IntroScene (container: Sprite) this.container = container;  overstyr offentlig funksjon createIntroCommand (): Kommando var uskarphet: BlurFilter = ny BlurFilter (BLUR_AMOUNT, BLUR_AMOUNT, 2); // symbol instances var text1: DisplayObject = ny IntroText1 (); var text2: DisplayObject = ny IntroText2 (); var text3: DisplayObject = ny IntroText3 (); var text4: DisplayObject = ny IntroText4 (); // dette er seriell kommandoen som kobler ting sammen var kommandoen: Kommando = ny SerialCommand (0, // "THIS" nye SetProperties (tekst1, x: 320, y: 200), nytt AddChild (container, tekst1) Ny TweenMaxFrom (tekst1, ZOOM_IN_TIME, skalaX: 0, skalaY: 0), ny TweenMaxTo (tekst1, BLUR_OUT_TIME, forsinkelse: HOLD_TIME, alfa: 0, blurFilter: uskarphet), nytt RemoveChild (container, tekst1) "New ISP" (ny tekst), ny TweenMaxFrom (tekst2, ZOOM_IN_TIME, scaleX: 0, skalaY: 0), ny TweenMaxTo (tekst2, x: 320, y: 200 BLUR_OUT_TIME, forsinkelse: HOLD_TIME, alfa: 0, blurFilter: uskarphet), nytt RemoveChild (container, text2), // "AN" nye SetProperties (tekst3, x: 320, y: 200), nytt AddChild , tekst3), ny TweenMaxFrom (tekst3, ZOOM_IN_TIME, skalaX: 0, skalaY: 0), ny TweenMaxTo (tekst3, BLUR_OUT_TIME, forsinkelse: HOLD_TIME, alfa: 0, blurFilter: uskarphet), nytt RemoveChild (container, tekst3 ), // "INTRO" nye SetProperties (tekst4, x: 320, y: 200), nytt AddChild (container, text4), ny TweenMaxFrom (text4, ZOOM_IN_TIM E, skalaX: 0, skalaY: 0), ny TweenMaxTo (tekst4, BLUR_OUT_TIME, forsinkelse: HOLD_TIME, alfa: 0, blurFilter: uskarphet), nytt RemoveChild (container, tekst4);); returnere kommando;  overstyr offentlig funksjon onSceneSet (): void // når scenen er satt, gå direkte til scene 1 sceneManager.setScene (ny Scene1 (container)); 

Du kan justere verdien av consts for å endre tweening effekter.


Trinn 7: Opprett Scene1

La oss nå se Scene1-klassen. Tekstfeltene er tweened i stilling en-for-en; knappene "intro_btn" og "scene2_btn" er registrert med museklikkhendelseslyttere etter at de er tweened i posisjon, oppnådd ved å koble sammen kommandoer for tweening og legge til lyttere med en seriell kommando.

En annen ting som er verdt å nevne er AddChild-kommandoen som legger Scene1Sprite til beholderen. Den er sammenkoblet i serie etter en ventekommando som venter på en ramme. Fordi TweenMax-klassen oppdaterer alle visningsobjekter i neste ramme etter kallet til metoden TweenMax.from (), noen ganger kan du se et raskt "glimt" av objekter i sine endelige plasser, før tweening starter. Formålet med Wait-kommandoen her er å gi TweenMax nok tid til å flytte objekter inn i de riktige startstedene.

 pakke import kommandoer.kommando; importere kommandoer.display.AddChild; importere kommandoer.display.RemoveChild; importere kommandoer.events.AddEventListener; importere kommandoer.events.RemoveEventListener; importere kommandoer.greensock.TweenMaxFrom; importere kommandoer.greensock.TweenMaxTo; importere kommandoer.ParallelCommand; importere kommandoer.SerialCommand; importere kommandoer.utils.SetProperties; importere kommandoer.utils.Wait; importer flash.display.Sprite; importere flash.events.Event; importer flash.events.MouseEvent; importer flash.filters.BlurFilter; importere scener.Scene; offentlig klasse Scene1 strekker Scene // konstante parametre privat statisk const IN_TIME: Number = 0.4; privat statisk const OUT_TIME: tall = 0,2; privat statisk const DELAY_TIME: Number = 0.2; privat statisk const BLUR_AMOUNT: Nummer = 20; privat var container: Sprite; privat var: Scene1Sprite; privat var uskarphet: BlurFilter; offentlig funksjon Scene1 (container: Sprite) this.container = container; ss = ny Scene1Sprite ();  overstyr offentlig funksjon createIntroCommand (): Command var kommandoen: Kommando = ny ParallelCommand (0, // "THIS" ny TweenMaxFrom (ss.text1_mc, IN_TIME, x: -400), // "IS" ny TweenMaxFrom ss.text2_mc, IN_TIME, y: -250, forsinkelse: DELAY_TIME), // "SCENE" ny TweenMaxFrom (ss.text3_mc, IN_TIME, y: 250, forsinkelse: DELAY_TIME * 2), // "1" ny TweenMaxFrom (ss.text4_mc, IN_TIME, x: 400, forsinkelse: DELAY_TIME * 3), // introknapp ny SerialCommand (0, ny TweenMaxFrom (ss.intro_btn, IN_TIME, y: 250, forsinkelse: DELAY_TIME * 4 ), ny AddEventListener (ss.intro_btn, MouseEvent.CLICK, replayIntro)), // scene 2-knapp, ny SerialCommand (0, ny TweenMaxFrom (ss.scene2_btn, IN_TIME, y: 250, forsinkelse: DELAY_TIME * 5), nye AddEventListener (ss.scene2_btn, MouseEvent.CLICK, gotoScene2)), // flytt scenen 1 sprite til midten av beholderen nye SetProperties (ss, x: 300, y: 200), // legg til scene 1 sprite til beholderen // vent på en ramme for å tillate ting flyttes til riktig plassering ny SerialCommand (0, ny ventetid (1 / containe r.stage.frameRate), nytt AddChild (container, ss))); returnere kommando;  overstyr offentlig funksjon createOutroCommand (): Kommando var uskarphet: BlurFilter = ny BlurFilter (BLUR_AMOUNT, BLUR_AMOUNT, 3); var command: Command = new ParallelCommand (0, // fjern skjermobjekter nye SerialCommand (0, // "THIS" nye TweenMaxTo (ss.text1_mc, OUT_TIME, ala: 0, blurFilter: uskarp), // "IS" nye TweenMaxTo (ss.text2_mc, OUT_TIME, ala: 0, blurFilter: uskarphet), // "SCENE" ny TweenMaxTo (ss.text3_mc, OUT_TIME, ala: 0, blurFilter: uskarphet), // "1" ny TweenMaxTo (ss.text4_mc, OUT_TIME, ala: 0, blurFilter: uskarphet), // introknapp ny TweenMaxTo (ss.intro_btn, OUT_TIME, ala: 0, blurFilter: uskarphet), // scene 2 knapp ny TweenMaxTo (ss.scene2_btn, OUT_TIME, ala: 0, blurFilter: uskarphet), // fjern scene 1 sprite new RemoveChild (container, ss)), // fjern hendelseslyttere nye RemoveEventListener (ss.intro_btn, MouseEvent.CLICK, replayIntro), ny RemoveEventListener (ss.scene2_btn, MouseEvent.CLICK, gotoScene2)); returnere kommando;  privat funksjon replayIntro (e: Event): void sceneManager.setScene (ny IntroScene (container));  privat funksjon gotoScene2 (e: Event): void sceneManager.setScene (new Scene2 (container)); 

Trinn 8: Opprett Scene2

Scene2-klassen ser ganske mye ut som Scene1; selv om noen tekst endres:

 pakke import kommandoer.kommando; importere kommandoer.display.AddChild; importere kommandoer.display.RemoveChild; importere kommandoer.events.AddEventListener; importere kommandoer.events.RemoveEventListener; importere kommandoer.greensock.TweenMaxFrom; importere kommandoer.greensock.TweenMaxTo; importere kommandoer.ParallelCommand; importere kommandoer.SerialCommand; importere kommandoer.utils.SetProperties; importere kommandoer.utils.Wait; importer flash.display.Sprite; importere flash.events.Event; importer flash.events.MouseEvent; importer flash.filters.BlurFilter; importere scener.Scene; offentlig klasse Scene2 utvider Scene // konstante parametre privat statisk const IN_TIME: Number = 0.4; privat statisk const OUT_TIME: tall = 0,2; privat statisk const DELAY_TIME: Number = 0.2; privat statisk const BLUR_AMOUNT: Nummer = 20; privat var container: Sprite; private varene er: Scene2Sprite; privat var uskarphet: BlurFilter; offentlig funksjon Scene2 (container: Sprite) this.container = container; ss = ny Scene2Sprite ();  overstyr offentlig funksjon createIntroCommand (): Kommando var kommando: Kommando = ny ParallelCommand (0, // "... OG" ny TweenMaxFrom (ss.text1_mc, IN_TIME, x: -400), // "DETTE ER" nytt TweenMaxFrom (ss.text2_mc, IN_TIME, Y: -250, forsinkelse: DELAY_TIME), // "SCENE" ny TweenMaxFrom (ss.text3_mc, IN_TIME, y: 250, forsinkelse: DELAY_TIME * 2), // " 2 "ny TweenMaxFrom (ss.text4_mc, IN_TIME, x: 400, forsinkelse: DELAY_TIME * 3), // introknapp ny SerialCommand (0, ny TweenMaxFrom (ss.intro_btn, IN_TIME, y: 250, forsinkelse: DELAY_TIME * 4), ny AddEventListener (ss.intro_btn, MouseEvent.CLICK, replayIntro)), // scene 1-knapp, ny SerialCommand (0, ny TweenMaxFrom (ss.scene1_btn, IN_TIME, y: 250, forsinkelse: DELAY_TIME * 5 ), // AddEventListener (ss.scene1_btn, MouseEvent.CLICK, gotoScene1)), // flytte scenen 2 sprite til midten av beholderen nye SetProperties (ss, x: 300, y: 200), // legg til scene 2 sprite til beholderen // vent på en ramme for å tillate ting flyttes til riktig plassering ny SerialCommand (0, nytt ventetid (1 / container.stage.frameRate), nytt AddChild (container, ss))); returnere kommando;  overstyr offentlig funksjon createOutroCommand (): Kommando var uskarphet: BlurFilter = ny BlurFilter (BLUR_AMOUNT, BLUR_AMOUNT, 3); var command: Command = new ParallelCommand (0, // fjern skjermobjekter nye SerialCommand (0, // "THIS" nye TweenMaxTo (ss.text1_mc, OUT_TIME, ala: 0, blurFilter: uskarp), // "IS" new TweenMaxTo (ss.text2_mc, OUT_TIME, aa: 0, blurFilter: uskarp), // "SCENE" ny TweenMaxTo (ss.text3_mc, OUT_TIME, ala: 0, blurFilter: uskarphet), // "2" ny TweenMaxTo (ss.text4_mc, OUT_TIME, ala: 0, blurFilter: uskarphet), // introknapp ny TweenMaxTo (ss.intro_btn, OUT_TIME, ala: 0, blurFilter: uskarphet), // scene 1 knapp ny TweenMaxTo (ss.scene1_btn, OUT_TIME, alpha: 0, blurFilter: uskarphet), // fjern scene 1 sprite new RemoveChild (container, ss)), // fjern hendelseslyttere nye RemoveEventListener (ss.intro_btn, MouseEvent.CLICK, replayIntro), ny RemoveEventListener (ss.scene1_btn, MouseEvent.CLICK, gotoScene1)); returnere kommando;  privat funksjon replayIntro (e: Event): void sceneManager.setScene (ny IntroScene (container));  privat funksjon gotoScene1 (e: Event): void sceneManager.setScene (ny Scene1 (container)); 

Test filmen

Det er riktig, vi er endelig ferdig! Trykk CTRL + ENTER i Flash IDE for å teste filmen og se de glatte og sømløse overgangene mellom scenene.


Konklusjon

I denne opplæringen har vi bygget egne kommando- og scenestyringsrammer. Vi har gått gjennom en hel del kode, men det er helt verdt det. Nå som vi har disse rammene for hånden, er scenehåndtering gjort med lettforståelig og vedlikeholdbar kode. Hvert Flash-program kan brytes ned i scener, og hver scene består av intro og outro kommandoer. Instruksjoner er innkapslet i kommandoer, noe som resulterer i ensartet "kodeutseende", som gjør at vi kan styre sceneintro og outro på en svært høy måte.

Jeg håper du likte det, takk for å lese!