Create en Smooth Rolling Scroller med AS3
4
Del
to
Del
Dette Cyber mandag Envato Tuts + kurs vil bli redusert til bare $ 3. Ikke gå glipp av.
I denne opplæringen vil du lære hvordan å lage en rullende liste aktiveres av musen opp og ned bevegelser, med forskjellige hastigheter basert på plasseringen av markøren. Jeg skal også dekke forbereder liste data med PHP, lasting XML-data og en kort forklaring av algoritmen jeg kom opp med. Nyt
Trinn 1: Innledning
Den andre dagen, da jeg var å teste en smart telefon, så jeg en av disse kule, ryddig liste scroller tweening effekter. Så begynte jeg å tenke på hvordan jeg kunne oppnå en slik effekt i Flash, gjorde noen undersøkelser på nettet og ærlig fant ikke akkurat det jeg var ute etter. Så her er resultatet av min lille oppdraget
Trinn 2:. Planlegging av Application
Etter noen undersøkelser fant jeg en fin algoritme. Den angår bare de mus bevegelse med prosentdelen av det synlige området (senere, vil bli identifisert som å være masken) som faktisk blir påpekt. Deretter blir beholderen beveget i samme forhold.
La oss si, for eksempel, at musen er nær bunnen av det blå krøllete braketten. I dette scenariet beholderen ville flytte 20% mot toppen.
Som du kan se dette fungerer ganske bra. Når musepekeren når toppen eller bunnen av det synlige området, har vi vissheten om at vi har nådd begynnelsen eller slutten av listen. Denne teknikken er ganske grei fordi vi ikke trenger å bekymre deg listen nå, for eksempel, begynnelsen og fortsetter å flytte sammen.
Men ... Hva om vi har hundrevis av listeelementer? Nå har vi et problem. Hvis vår synlige området (maske) har, la oss si, 500 piksler i høyden og vi har en liste over 100 elementer (alt innhold område), hver av dem med en høyde på 20 piksler, å bevege musen 1/5 av det synlige området (maske) vil resultere i overgangen av 20 elementer (400px /20px) ved lysets hastighet. . Så jeg tror denne tilnærmingen vil ikke resultere godt
Så kom jeg opp med denne løsningen:
I utgangspunktet har jeg definert to soner - under og over sentrum. Hver sone har en verdi forbundet. Denne verdien er beregnet basert på avstanden mellom musepekeren og sentrum. Så, hvis vi faktisk knytte denne verdien med en variabel vi kunne endre hastigheten basert på museposisjonen. Minustegnet er bare for å avgjøre retningen av bevegelsen
Når det er sagt, la oss få noen reelle innholdet
Trinn 3:.. Griper Data
Vi skal bruke en ekstern xml fil for å mate programmet fordi:
Vi vil være i stand til å legge til, fjerne, redigere, slette data veldig lett
Actionscript 3 har en stor API å jobbe med xml
Så trenger vi en stor liste over elementer ... Hva om listen over land rundt om i verden?
(Dette trinnet er slags en ekstra emnet fordi jeg skal bruke andre språk for å hjelpe meg med xml fil forberedelse. Så hvis dette ikke er av din interesse ikke bekymre deg, vil dette være i nedlastingsfiler)
Jeg har bare googlet [liste land verden] og i det første resultatet jeg fikk denne listen:
1 Afghanistan
2 Akrotiri
(...)
< li> 256 Zambia
257 Zimbabwe
(kilde: http://www.listofcountriesoftheworld.com)
Kopier alt til noen tekstfil og lagre den. Jeg kalte det countries.txt.
Skriptet nedenfor er skrevet i PHP. Du trenger en web-server for å kjøre den. Jeg bruker WampServer, en fin pakke som installerer PHP, MySQL, og Apache med et par klikk.
For å bruke dette skriptet må du initialisere web server, og kjøre skriptet i en katalogen din \\ www \\ katalogen. Et siste notat: manuset og countries.txt må være i samme mappe
< php $ linjer = file ("countries.txt"); $ fp = fopen ('data.xml', '.? en '); fwrite ($ fp,' <? xml version = "1.0" encoding = "UTF-8" >? '"\\ n");. fwrite ($ fp,' < elementer > '". \\ n "); foreach ($ linjer som $ linje) {$ linje = RTRIM ($ linje," \\ r \\ n "); $ mønster = '/\\ d + \\ s * /'; $ erstatning = ''; $ linje = preg_replace ($ mønster, $ erstatning, $ linje); $ str = "\\ t". '< element >' . $ linje. '< /element >' . "\\ n"; fwrite ($ fp, $ str);} fwrite ($ fp, '< /elementer >'); fclose ($ fp); >
Resultatet av dette skriptet vil bli lagret i en fil med navnet data.xml. Hvis du ikke forstår dette trinnet ikke bekymre deg fordi du kan laste det ned her
Trinn 4:. Sette opp FLA fil
Hvis du ser på demoen, du vil merke at vår søknad har et grensesnitt, knapper og så videre. Så la oss begynne å sette all grafikken sammen
Åpne Adobe Flash og opprette en ny Actionscript 3-fil med følgende innstillinger.
Høyde : 500px
frame rate: 63
Klasse: document
Lagre filen. Jeg har kalt meg scroll.fla
Trinn 5:. Bakgrunnsbildet
Fil > Import > Import Stage og velg background.jpg bilde (alle bildene er tatt med i assets.zip, innenfor kilden nedlasting)
Nå:.
Vindu > justere
Dette vil åpne Align Panel. Midtstille bildet på scenen klikke på knappene som vises i bildet nedenfor
Og nå gir ditt lag navnet Bakgrunn (ikke glem å låse den).
Trinn 6: Scroller sin bakgrunn
Lag et nytt lag og importere bildet pad.png. Prosessen med import er nettopp det samme som forrige trinn. Trykk F8 for å konvertere den til en MovieClip og gi den navnet mcPad. Neste klikk på Eksporter for Action boksen, og i klasse input-feltet skriver du navnet Pad.
I utgangspunktet vi definerer puten MovieClip som en underklasse av MovieClip klasse selv. Derfor er vi i stand til å bruke det direkte fra vår kode og behandle det som en vanlig MovieClip siden det arver fra MovieClip klasse. Ganske kul ikke sant?
Nå slette dette tilfellet fra scenen, men ikke fra biblioteket (fordi som jeg sa vi skal bruke den fra koden).
Trinn 7: Knappene
Import bildet itemBackground.jpg trykke F8 for å konvertere den til en MovieClip. Gi den navnet mcItem. Igjen eksporterer for Actionscript og navngi klassen Element
Nå prosessen vil være litt annerledes.
gi nytt navn til det eneste laget der som Back og låse den
opprette et nytt lag, og kaller det Over
importere bildet itemBackground-over.jpg til Over lag
konvertere den til en MovieClip og gi den et navn mcItemOver
stilling mcItemOver MovieClip ved x = 0 og y = 0
gi den en forekomst navn item_btn_over
Endelig låse Over lag, komme tilbake til hovedtidslinjen, og slette mcItem filmklipp eksempel fra scenen
Trinn 8:. The Font
For dette programmet jeg m bruker Arial Rounded MT Bold Negrito font (det er en gratis font, jeg har lastet ned mine fra her). Siden det er ikke et system font vil vi måtte importere den også:
på biblioteket separator klikk på øvre høyre knappen (den med en liten pil)
velg New Font
kalle det fontArialRounded, velg font på rullegardinboksen under. Igjen Export for Actionscript og i klassen feltet gi den navnet ArialRounded
I hovedtidslinjen vi trenger bare bakgrunnslaget, slik at du kan slette de gjenværende lagene.
Det er det for Flash-redigeringsverktøyet. La oss starte koding
Trinn 9:. Legge Application Bakgrunn for Stage
Opprett en ny Actionscript-fil, lagre den som DocumentClass.as. Deretter legger du denne koden:
pakke {import flash.display.MovieClip; public class document strekker MovieClip {private Var _pad: MovieClip; offentlig funksjon document () {_pad = new Pad (); addChild (_pad); _pad.x = stage.stageWidth /2 - _pad.width /2; _pad.y = stage.stageHeight /2 - _pad.height /2; }}}
(Hvis du er usikker på hva vi gjør her, sjekk ut denne rask innføring dokumentere klasser.)
Husk på mdPad Denne koden skaper i utgangspunktet en forekomst av mcPad Så jeg har sentrert den på scenen (vertikalt og horisontalt). Test programmet og du skal se bakgrunnen layout på flash player Vår søknad vil bruke en beholder for å holde alle elementene sammen. Så skal vi lage en ny MovieClip i document. Erklære eiendommen: Inne konstruktøren, på slutten: Legg til følgende import uttalelser: Erklærer følgende egenskaper: Så gjennomføre følgende metoder: Til slutt legger denne metoden kallet til konstruktøren: Så langt har vi: Test programmet og du skal se, i konsollen, alle XML-data. La oss gå videre Legg til følgende import uttalelser. Legg disse nye variabler: Oppdater dataLoaded metode: Nå har vi opprettet 200 + knapper og sette dem på skjermen. Hvis du kjører programmet vil du legge merke til at denne listen begynner på posisjon (0, 0) og fyller ned hele scenen. Det er ikke det vi ønsker så la oss håndtere det i neste trinn La oss lage en form for å maskere listen, slik at vi bare ser den synlige Området, som i bildet fra før: I slutten vi vil sentrere maske og beholderen. Så, legge til en annen import uttalelse: Egenskaper: Og ... I dataLoaded metoden på slutten, legg til følgende kode: Bare en liten forbedring ... Akkurat nå vår container har mye hull fordi det er en margin mellom hvert element. Så la oss gi den en bakgrunn for å unngå uønskede resultater når du lytter til arrangementer Eiendom: Fortsatt i dataLoaded metoden, under den eksisterende koden: Som du sikkert vet, lyttere for hendelser. Her vil vi bruke en for mouse arrangementet og en annen for mouseout hendelsen Legg til dette på slutten av dataLoaded metode. La oss nå gjennomføre movingOver og movingOut metoder: Nå kan vi lytte til arrangementer, mer spesifikt MOUSE_OVER og MOUSE_OUT. Hendelser er like meldinger som varsler ethvert objekt venter på den samme hendelsen. "Budskapet" sender bare at hendelsen har funnet sted. I dette tilfellet _container objektet vil bli lyttet til mouse og mouseout hendelser. Når de finner sted den _container har evnen til å reagere deretter. Så første vi tildele arrangementet lyttere til _container objektet og deretter senere, hvis _container er svevde over mouse lytteren blir fjernet. Tvert imot, når musen er ute av _container protestere musen over lytteren er tildelt igjen til _container Arrangementet flyt er en kraftig mekanisme som gjør at programmerer for å håndtere flere objekter med bare én hendelse lytteren. Så, som du sikkert forestille deg, _container.addEventListener vil "lytte" for hendelser som involverer beholderen, elementene og bakgrunnen form - det vil si, container og alt inni den. Du kan kontrollere dette ved å legge inn følgende kode i movingOver Hotell og movingOut Dette vil spore objekt som sendes hendelsen. Når du lytter til denne hendelsen vi kan definere en atferd som finner sted hver ramme, i vårt tilfelle 63 ganger per sekund. Det er derfor onEnterFrame hendelsen er svært nyttig for animasjoner basert på fps. Vi trenger dette for å flytte vår scroll, så movingOver og movingOut metoder skal se slik ut: Legg disse egenskapene: Legg følgende metode på slutten av koden (under movingOut metoden). Dette vil bli kjørt hver ramme, takket være enterframe hendelsen lytteren vi opprettet tidligere. Jeg skal forklare hva denne koden gjør under Og her er logikken i scroller: Denne linjen med kode får hastigheten ved å dele halvparten av takhøyde med musen Y posisjon. La oss si at halvparten av scenen er 200px og musepekeren er i posisjon 300px. Bruk av formelen får vi: (200-300) /200 * 15 (_maxSpeed eiendom) = -7,5 som er negative, så listen vil gi oss en nedadgående bevegelse. Det er nettopp det vi er ute etter. Hvis musepekeren var ovenfor sentrum ville vi ha en positiv verdi, og listen ville flytte opp Neste, med denne uttalelsen. Vi tildele virkelige hastighet, for hver ramme (63 ganger per sekund) i _container.y stilling. Så vi sjekke med hvis uttalelser om containerens y posisjon er der den skal være. Husk dette bildet: Jeg kommer til å bruke greensock sin TweenMax Library (du kan laste det ned her) for å animere hver knapp på og av (når musen svever over eller forlater elementet). Oppdater movingOver Hotell og movingOut Legg denne importen uttalelse. MouseEvent): void {_container.removeEventListener (MouseEvent.MOUSE_OVER, movingOver); addEventListener (Event.ENTER_FRAME, enterframe); if (event.target er Element) TweenMax.to (Element (event.target) .item_btn_over, 0,2, {alfa: 1});} private funksjon movingOut (event: MouseEvent): void {removeEventListener (Event.ENTER_FRAME, enterframe ); _container.addEventListener (MouseEvent.MOUSE_OVER, movingOver); if (event.target er Element) TweenMax.to (Element (event.target) .item_btn_over, 0,2, {alpha: 0});} La oss analysere denne koden i detalj. Den event.target vil referere til objektet som skal ekspedere arrangementet, i dette tilfellet Mouse eller mouseout. Dette objektet kan være en _item, den _background eller _container men vi er bare interessert i varen objekter så vi spesifisere: Så, hvis så, vi vil animere hva Element objekt sendt hendelsen ved å skrive vare (event.target) .item_btn_over. item_btn_over Akkurat nå vår applikasjon fungerer ganske greit. Vi har imidlertid noen kode gjentatt og en svært sentralisert programmet også. Legg merke til at dataLoaded metoden gjør nesten alt. Action har utmerket støtte for objektorientert programmering. Vi kunne bruke den til å koble data lasting fra programmet logikken etc. Det er en fin design mønster kalt Model View Controller som fungerer veldig bra med brukergrensesnitt. Dette mønsteret i hovedsak skiller anvendelsen av tre forskjellige lag. The Model omhandler forretningslogikk, datahåndtering. Kontrolleren omhandler menneskelig interaksjon med programmet. Og til slutt Se avtaler med det visuelle grensesnittet av søknaden. I dette tilfellet søknaden vår er for liten til å gjennomføre dette mønsteret. Så, la oss tilpasse akkurat den modellen og en diverse View /Controller til søknaden vår. Først la oss bare håndtere noen gjentatte kode Opprett en ny Actionscript-fil og skriv inn følgende kode: Vi må utføre denne oppgaven flere ganger. Så jeg bestemte meg for å lage en klasse som er justert noe skjerm objekt på scenen når vi kaller det. For å gjøre dette arbeidet må du lage en katalogstruktur som dette: \\ com \\ tutsplus \\ aktiv \\ util \\ i produksjonen din katalog eller inni klassen banen. Deretter i refactored document vil du se hvordan du bruker denne klassen Modellen styrer atferden og data av søknaden domenet, svarer på forespørsler om informasjon om sin tilstand (vanligvis fra visningen) og reagerer på instruksjonene for å endre tilstand (vanligvis fra kontrolleren) kilde:. MSDN Legge dataene og lagre den i datastrukturer er fin operasjoner for å komponere vår modell. Opprett en ny Actionscript-fil og kaller det ScrollModel.as: Med denne oppdateringen vår dataLoaded Det er nesten den samme koden som vi brukte i document for lasting av data, med En vesentlig forskjell er Etter å tildele våre 200 + elementer til XMLList eiendom denne linjen med kode sender en hendelse til den som lytter. I praksis vil vi trenger å vite når dette skjer for å bruke disse dataene i en annen klasse Opprett en ny Actionscript-fil og kall den ScrollBox.as : Legg merke til de Juster klassen metoder som vi bruker: Nå er vi bare nødt til å bruke metoden Align.centerHorizontallyInStage () for å justere en skjerm objekt horisontalt createRollingScroller metoden vil bare starte når vi er ferdig med å lagre all . data i elementene: XMLList eiendom Endre document: Igjen, legg merke til hvor lett det er å sentrere visningsobjekter på scenen med Align.centerInStage () metode: Takk for følge. Ta vare! Anmeldelser
MovieClip? Husk at vi har eksportert det for Actionscript. Så når vi ønsker å bruke denne MovieClip vi bare nødt til å skrive
ny Pad ();
MovieClip og legger det til scenen ved hjelp av addChild ( ) metoden. Så nå er _pad
på vår DisplayList!
Trinn 10:. Container
private Var _container: MovieClip;
_container = new MovieClip (); addChild (_container);
Trinn 11: Importere XML Data
import flash.events.Event, import flash.net.URLRequest, import flash.net.URLLoader;
offentlig Var loader: URLLoader; offentlig Var data: XML, offentlige Var poster: XMLList;
privat funksjon dataload (): void {loader = new URLLoader (); loader.addEventListener (Event.COMPLETE, dataLoaded); loader.load (ny URLRequest ("data.xml"));} private funksjon dataLoaded (hendelse: Hendelse): void {trace (". data Loaded");}
dataload ();
pakke {import flash.display.MovieClip; import flash.events.Event; import flash.net.URLRequest; import flash.net.URLLoader; public class document strekker MovieClip {private Var _pad: MovieClip; private Var _container: MovieClip; offentlig Var loader: URLLoader; offentlig funksjon document () {_pad = new Pad (); addChild (_pad); _pad.x = stage.stageWidth /2 - _pad.width /2; _pad.y = stage.stageHeight /2 - _pad.height /2; _container = new MovieClip (); addChild (_container); dataload (); } Private funksjon dataload (): void {loader = new URLLoader (); loader.addEventListener (Event.COMPLETE, dataLoaded); loader.load (ny URLRequest ("data.xml")); } Private funksjon dataLoaded (hendelse: Hendelse): void {trace (ny XML (event.target.data.toString ())); }}}
Trinn 12: Bygge Hver knapp
Import flash.text.TextFormat, import flash.text.TextField; import flash .text.TextFieldAutoSize, import flash.text.Font;
offentlig Var data: XML, offentlige Var poster: XMLList; private Var _item: Element; private Var _itemTextField: Textfield, private Var _defaultFormat : tekstformat = new tekstformat (); privat Var _arialRounded: Font = new ArialRounded (); privat Var _textFieldXPosition: uint = 10; privat Var _textFieldYPosition: uint = 13; privat Var _textFieldWidth: uint = 240; privat Var _textFieldHeight: uint = 25; private Var _itemPosition: uint = 49;
privat funksjon dataLoaded (hendelse: Hendelse): void {//Denne eiendommen har lastet xml data data = new XML (event.target.data ); //Element eiendommen innehar alle gjentakende element elementer elementer = data.item; //Dette gjentar enn hvert element for (var i = 0, jeg < items.length (); i ++) {//husker mcItem? Vi er forekomster som MovieClip _item = ny vare (); //Setter Over lag MovieClip alfa til 0 _item.item_btn_over.alpha = 0; //Oppretter Element tekstfeltet _itemTextField = new Textfield (); _itemTextField.x = _textFieldXPosition; _itemTextField.y = _textFieldYPosition; _itemTextField.selectable = false; _itemTextField.width = _textFieldWidth; _itemTextField.height = _textFieldHeight; _itemTextField.embedFonts = true; _defaultFormat.color = 0x111112; _defaultFormat.font = _arialRounded.fontName; _defaultFormat.size = 18; _itemTextField.defaultTextFormat = _defaultFormat; _itemTextField.text = elementer [i] .toString (); //Legger tekstfeltet til elementets visningsliste _item.addChild (_itemTextField); //Stillinger hvert element vertikalt basert på iterasjon verdi _item.y = i * _itemPosition; _item.buttonMode = true; _item.mouseChildren = false; //Legger til elementet i beholderen visningslisten _container.addChild (_item); }}
Trinn 13:. Maske listen
import flash.display.Shape;
private Var _mask: Shape; private Var _maskWidth: uint = 288; privat Var _maskHeight: uint = 290; private Var _paddingTop : uint = 120;
_mask = new Shape (); _ mask.graphics.beginFill (0xff0000); _ mask.graphics.drawRect ( 0, 0, _maskWidth, _maskHeight); _ mask.graphics.endFill (); //sentrum masken horisontalt på stage_mask.x = stage.stageWidth /2 - _container.width /2; //stillinger masken vertikalt på 120px fra den top_mask.y = _paddingTop; addChild (_mask); //tildeler masken til container_container.mask = _mask; //sentre beholderen horisontalt på stage_container.x = stage.stageWidth /2 - _container.width /2; //posisjonerer beholderen vertikalt på et visst value_container.y = _paddingTop;
Trinn 14: Legge til en bakgrunn til Container
private Var _background. Shape;
_background = new Shape (); _ background.graphics.beginFill (0xFFFFFF); _ background.graphics.drawRect (0, 0, _container.width, _container.height); _ background.graphics.endFill (); _ container.addChildAt (_background, 0);
Trinn 15: Legge Event Lyttere
_container.addEventListener (MouseEvent.MOUSE_OVER, movingOver); _ container.addEventListener (MouseEvent.MOUSE_OUT, movingOut);
privat funksjon movingOver (event: MouseEvent): void {_container.removeEventListener (MouseEvent.MOUSE_OVER, movingOver); } private funksjon movingOut (event: MouseEvent): void {_container.addEventListener (MouseEvent.MOUSE_OVER, movingOver); }
Trinn 16:. Hendelses Flow
metoder:
trace (event.target);
Trinn 17: onEnterFrame
privat funksjon movingOver (event: MouseEvent): void {_container.removeEventListener (MouseEvent.MOUSE_OVER, movingOver); addEventListener (Event.ENTER_FRAME, enterframe);} private funksjon movingOut (event: MouseEvent): void {removeEventListener (Event.ENTER_FRAME, enterframe); _container.addEventListener (MouseEvent.MOUSE_OVER, movingOver); }
Trinn 18: enterframe Method
private Var _maxSpeed: uint = 15; privat Var _speed: Number;
funksjon enterframe (hendelse: Hendelse):. Void {_speed = (_mask.height /2 - _mask.mouseY) /(_mask.height /2) * _maxSpeed; _container.y + = _speed; if (_container.y > = _paddingTop) {removeEventListener (Event.ENTER_FRAME, enterframe); _container.y = _paddingTop; } If (_container.y < = _mask.height - _container.height + _paddingTop) {removeEventListener (Event.ENTER_FRAME, enterframe); _container.y = _mask.height - _container.height + _paddingTop; }}
_speed = (_mask.height /2 - _mask.mouseY) /(_mask.height /2) * _maxSpeed;
_container.y + = _speed;
Trinn 19: Animere element Button
metoder; *
import gs::
privat funksjon movingOver (event:
if (event.target er Element)
er forekomsten navnet på mcItemOver
MovieClip som vi opprettet i trinn 7. 0,2
er animasjonen tid, og i den siste parameteren vi angi hvilke egenskapen vi ønsker å animere (alpha)
Trinn 20:. refactoring
Trinn 21:. Vanlige oppgaver
pakke com.tutsplus.active.util {import flash.display. *; public class Strek {public static funksjon centerInStage (stadium: Stage, mc: Displayobject): void {mc.x = stage.stageWidth /2 - mc.width /2; mc.y = stage.stageHeight /2 - mc.height /2; } Public static funksjon centerHorizontallyInStage (stadium: Stage, mc: Displayobject): void {mc.x = stage.stageWidth /2 - mc.width /2; } Public static funksjon centerVerticallyInStage (stadium: Stage, mc: Displayobject): void {mc.y = stage.stageHeight /2 - mc.height /2; }}}
Trinn 22:. Modell
pakke {import flash.events.Event; import flash.net.URLRequest; import flash.net.URLLoader; import flash.events.EventDispatcher; klasse ScrollModel strekker EventDispatcher {public Var loader: URLLoader; offentlig Var data: XML; offentlige Var elementer: XMLList; public static konst MODEL_UPDATE: String = "modelChange"; offentlig funksjon ScrollModel () {loader = new URLLoader (); loader.addEventListener (Event.COMPLETE, dataLoaded); } Offentlig funksjon belastning (req: URLRequest): void {loader.load (req); } Private funksjon dataLoaded (hendelse: Hendelse): void {data = new XML (event.target.data); elementer = data.item; dispatchEvent (ny hendelse (ScrollModel.MODEL_UPDATE)); }}}
metoden har bare tre linjer med kode nå!
dispatchEvent (ny hendelse (ScrollModel.MODEL_UPDATE));
Trinn 23:. Den ScrollBox Class
pakke {import flash.display.Sprite; import flash.display.Stage; import flash.events.Event; import flash.events.MouseEvent; import flash.display.Shape; import flash.text.TextFormat; import flash.text.TextField; import flash.text.TextFieldAutoSize; import flash.text.Font; import gs. *; import com.tutsplus.active.util.Align; public class ScrollBox strekker Sprite {private Var _container: Sprite; private Var _item: Element; private Var _itemTextField: Textfield; private Var _defaultFormat: tekstformat = new tekstformat (); private Var _arialRounded: Font = new ArialRounded (); private Var _textFieldXPosition: uint = 10; private Var _textFieldYPosition: uint = 13; private Var _textFieldWidth: uint = 240; private Var _textFieldHeight: uint = 25; private Var _itemPosition: uint = 49; private Var _mask: Shape; private Var _maskWidth: uint = 288; private Var _maskHeight: uint = 290; private Var _paddingTop: uint = 120; private Var _background: Shape; private Var _maxSpeed: uint = 15; private Var _speed: Number; private Var _items: XMLList; private Var _stage: Stage; offentlig Var scrollModel: ScrollModel; offentlig funksjon ScrollBox (stadium: Stage, m: ScrollModel) {this.scrollModel = m; this._stage = scenen; scrollModel.addEventListener (ScrollModel.MODEL_UPDATE, createRollingScroller); } Private funksjon createRollingScroller (hendelse: Hendelse = null): void {_container = new Sprite (); _stage.addChild (_container); _items = scrollModel.items; for (var i = 0; i < _items.length (); i ++) {_item = ny vare (); _item.item_btn_over.alpha = 0; _itemTextField = new Textfield (); _itemTextField.x = _textFieldXPosition; _itemTextField.y = _textFieldYPosition; _itemTextField.selectable = false; _itemTextField.width = _textFieldWidth; _itemTextField.height = _textFieldHeight; _itemTextField.embedFonts = true; _defaultFormat.color = 0x111112; _defaultFormat.font = _arialRounded.fontName; _defaultFormat.size = 18; _itemTextField.defaultTextFormat = _defaultFormat; _itemTextField.text = _items [i] .toString (); _item.addChild (_itemTextField); _item.y = i * _itemPosition; _item.buttonMode = true; _item.mouseChildren = false; _container.addChild (_item); } _background = New Shape (); _background.graphics.beginFill (0xFFFFFF); _background.graphics.drawRect (0, 0, _container.width, _container.height); _background.graphics.endFill (); _container.addChildAt (_background, 0); _mask = new Shape (); _mask.graphics.beginFill (0xff0000); _mask.graphics.drawRect (0, 0, _maskWidth, _maskHeight); _mask.graphics.endFill (); Align.centerHorizontallyInStage (_stage, _mask); _mask.y = _paddingTop; addChild (_mask); _container.mask = _mask; Align.centerHorizontallyInStage (_stage, _container); _container.y = _paddingTop; _container.addEventListener (MouseEvent.MOUSE_OVER, movingOver); _container.addEventListener (MouseEvent.MOUSE_OUT, movingOut); } Private funksjon movingOver (event: MouseEvent): void {_container.removeEventListener (MouseEvent.MOUSE_OVER, movingOver); addEventListener (Event.ENTER_FRAME, enterframe); if (event.target er Element) TweenMax.to (Element (event.target) .item_btn_over, 0,2, {alfa: 1}); } Private funksjon movingOut (event: MouseEvent): void {removeEventListener (Event.ENTER_FRAME, enterframe); _container.addEventListener (MouseEvent.MOUSE_OVER, movingOver); if (event.target er Element) TweenMax.to (Element (event.target) .item_btn_over, 0,2, {alpha: 0}); } Funksjon enterframe (hendelse: Hendelse): void {_speed = (_mask.height /2 - _mask.mouseY) /(_mask.height /2) * _maxSpeed; _container.y + = _speed; if (_container.y > = _paddingTop) {removeEventListener (Event.ENTER_FRAME, enterframe); _container.y = _paddingTop; } If (_container.y < = _mask.height - _container.height + _paddingTop) {removeEventListener (Event.ENTER_FRAME, enterframe); _container.y = _mask.height - _container.height + _paddingTop; }}}}
Align.centerHorizontallyInStage (_stage, _mask); Align.centerHorizontallyInStage (_stage, _container);.
Trinn 24: Sluttdocument
pakke {import flash.display.MovieClip; import flash.display.Sprite; import flash.events.Event; import flash.net.URLRequest; import flash.net.URLLoader; import flash.events. *; import com.tutsplus.active.util.Align; public class document strekker MovieClip {private Var _pad: MovieClip; offentlig Var scrollModel: ScrollModel; offentlig Var scrollBox: ScrollBox; offentlig funksjon document () {config (); scrollModel = new ScrollModel (); scrollModel.load (ny URLRequest ("data.xml")); scrollBox = new ScrollBox (stadium, scrollModel); } Private funksjon config (): void {_pad = new Pad (); addChild (_pad); Align.centerInStage (stadium, _pad); }}}
Align.centerInStage (stadium, _pad);
Konklusjon
< p> Det er det for nå folkens! Jeg har dekket noen interessante Actionscript 3 emner og jeg håper du finner dette nyttig. Hvorfor ikke forbedre dette programmet til et nytt nivå, recfactoring, og legger til funksjonalitet, etc?