AS3 101: Display List - Basix
to
Del
to
Del
Dette Cyber Monday Envato Tuts + kurs vil bli redusert til bare $ 3. . Ikke gå glipp av
Dette innlegget er en del av en serie som heter AS3 101.AS3 101: Loops - BasixAS3 101: XML - Basix
I denne sjette utgaven av AS3 101, vi skal studere emner knyttet til "Display List", Flash gjengivelse system. Med en solid forståelse av hvordan å programmere Vis liste, en hel verden av dynamiske muligheter åpne opp. Du vil ikke lenger være knyttet til statisk visning struktur som du oppretter på tidslinjen i IDE, men du kan lage og ødelegge movieclips (og mer) med kode.
Det er mye å vite, så vi vil bedre komme i gang. Vårt endelige mål er en vegg av klikkbare bilder (gå inn og sjekke ut demoen). Mens enkel, introduserer det mange Vise liste programmeringsteknikker
Trinn 1:. Hva er den Vise liste
Vis liste er betegnelsen som brukes i referanse til Flash gjengivelse? motor og prosess. Teknisk sett er det ikke selve motoren, men et hierarkisk tre av hva som blir gjengitt. Alt som kan sees i en Flash-film er en del av Vis liste. En konsekvens av denne oppfatningen er at hvis et objekt er på Vis liste, så det er tegnet av den renderer. Hvis et objekt er ikke på Vis liste, er det ikke tegnet
Vi vil utforske noen av de viktigste skjerm Listen begreper i de kommende trinnene
Trinn 2:.. Den Displayobject
Action definerer noe som kalles en "Displayobject". Vi kommer til å være å få i forkant av oss selv her; vi har ikke diskutert objektorientert programmering teknikker så langt i AS3 101, og dessverre er dette bestemt emne er best forstås med et grep om arv. Ikke bekymre deg. Vi dekker OOP fort nok, og i mellomtiden skal jeg prøve mitt beste for å skjule de geekier detaljer fra deg.
Så, er en Displayobject utgangspunktet noe som kan Det finnes flere typer, men vi ll komme til dem i tide. Hva er viktig å være oppmerksom på akkurat nå er at selv om figurer, bitmaps og videoer alle skjerm ting annerledes, de faktisk har ganske mye til felles. Mest åpenbare er at alle av dem vise noe. De kan legges til Vis liste. Ja, de er spesialister på ulike typer skjerm oppgaver, men til slutt er de alle DisplayObjects, og derfor kan gjengis av Flash Player. I tillegg alle Du kan se at dette er litt av en liste . Selvfølgelig vil alle som kan vises objekt må ha noen grunnleggende funksjonalitet. Annenhver Displayobject kan gjøre alle de ovennevnte, men begynner å legge til mer funksjonalitet. Så ... hvorfor ikke bare gå med de mer funksjonelle, mer dyktige typer? For en, spesialisering. Bare en Bitmap objekt kan vise en ladd bilde, og kun en video objekt kan vise en video. Men det er også noe som heter overhead. Du kan tegne vektorgrafikk i et MovieClip akkurat som du kan en figur, men fordi en MovieClip gjør så mye Action lenger definerer noe som kalles en "InteractiveObject." En InteractiveObject er en annen type Displayobject, slik at den kan gjøre alt dette generelle ting vi snakket om i det siste trinnet. Men InteractiveObjects legge et sentralt element: interaktivitet (du bør ha sett at en kommer). Det finnes to typer InteractiveObjects: Selv om textfields og SimpleButtons er helt annerledes, de begge deler fellestrekk, i tillegg til fellestrekk som deles av alle DisplayObjects. InteractiveObjects kan: Igjen, dette er ting som alle InteractiveObjects kan gjøre. En form, men kan ikke gjøre disse tingene. Omvendt har en Textfield ting som alfa og filtre, akkurat som alle DisplayObjects. Dypere inn i kaninhullet vi går ... Action slutt definerer noe som kalles en En Display er en type Displayobject, slik at det kan plasseres og filtrert, og så videre. Det er også en type InteractiveObject, slik at det kan mottas mus hendelser og så videre. Men det videre legger mer funksjonalitet. Du er sikkert kjent med ideen om å sette en MovieClip innsiden av en annen MovieClip. Det faktum at en MovieClip kan inneholde Som du kan se, er mest opptatt med inneholder andre DisplayObjects den Display. Men husk at det er alt som en Displayobject er (det kan flyttes, skaleres, roteres, filtrert, etc), samt alt som en InteractiveObject er (det har mus og viktige hendelser, etc). Det er tre DisplayObjectContainers å vite om: Den generelle konsensus er at hvis du ikke trenger en tidslinje, er en Sprite foretrekke fremfor en MovieClip fordi det er mindre overhead involvert Jeg er sikker på at du er komfortabel med å sette ting på Vis liste, selv om du ikke er kjent med at begrep. Når du oppretter en MovieClip symbol, og dra en forekomst av det på scenen, du skaper en MovieClip objekt og legge den til Vis liste. La oss gjøre følgende: Opprett en ny Actionscript 3 dokument. Tegn en figur på scenen, velger du den, og slå den inn i en MovieClip symbol. Gi den en forekomst navn. Jeg skal bruke "manualClip". Nå kan du klikke på det første bildet av laget, og åpne Handlinger panelet. Skriv inn følgende kode: Hvis du kjører filmen din, bør du se følgende i utdatapanelet: Nå, hva gjorde vi i det scriptet? Vi begynte å jobbe med noen skjermlisten. Først var numChildren. Dette er en egenskap ved enhver Display, og den returnerer antall umiddelbare barn som finnes (det går bare ett nivå dypt: noen barn som ytterligere inneholder barn regnes ikke). Vi sette denne verdien til en annen variabel (kalt "len") som per gode looping teknikker som omtales i siste AS3 101 opplæringen. Så inne i loop, bruker vi en annen Display teknikk, getChildAt. Dette er en måte for å få tilgang til enkelte barn innsiden av beholderen. I dette tilfellet, vi får dem med dybde. Så, når vi har Displayobject, vi spore det navnet. Det kan eller ikke kan være overraskende for deg at objektet vi plasseres manuelt i IDE dukker opp gjennom Actionscript. For det meste er det liten forskjell mellom å arbeide i IDE eller med koden når det gjelder objektet faktisk vist. Mange ganger er det bare enklere å tegne eller sted eiendeler på scenen visuelt. Andre ganger kan vi trenger å være mer dynamisk om det, og opprette objekter med kode. Det er godt å vite at uansett, vi ganske mye har full kontroll over prosessen Vi vil ta ting et skritt videre (derav inkrement i trinn nummer ...). Vi vil nå opprette og vise en Displayobject med kode. Bruk FLA du startet med i det siste trinnet og legge til følgende kode på toppen (før koden du skrev forrige gang) Hva gjør dette? Vel, det skaper en Sprite. En Sprite kan bare opprettes auto; alle symboler i biblioteket er movieclips. Husk at en Sprite er bare en MovieClip uten en tidslinje. Siden vi ikke kan virkelig skape innhold på tidslinjen ved hjelp av koden, kan vi like godt bruke Sprites når vi trenger for å lage en Displayauto. Etter at vi har vår Sprite, bruker vi grafikk eiendommen for å tegne en firkant med kode. Det er ganske mye vi kan gjøre med tegningen API, men i et nøtteskall er det som en steg-for-steg sett med instruksjoner om hvordan du kan bruke en penn til å tegne figurer. Først setter vi fyllfargen, da vi bruker en praktisk metode for å flytte pennen rundt i et rektangel, tegne en firkant. Dessverre har vi ikke tid til å gå dypere inn i de Graphics objekt, men sjekk ut dokumentasjonen for en fullstendig liste over ting du kan gjøre for å trekke programmatisk. Det er ganske dypt og kan gjøre så mye mer enn uavgjort rektangler. Faktisk er kjernen 3D motoren Flash Player 10 basert av evnen til å drawTriangles. Det blir gal ... men ha det gøy med det! I hvert fall hvis du kjører filmen nå, vil du se noen endring fra forrige gang. Hvorfor det? Fordi mens vi har opprettet Sprite, det er ikke ennå på Vis liste. Husk dette. Det felte av erfarne utviklere hele tiden. Du må legge til Sprite (eller andre Displayobject du oppretter med kode) til Vis liste. Du gjør det ved hjelp av addChild metoden av beholderen du ønsker å bruke, som dette: Nå hvis du kjører skriptet, bør du ikke bare se en stor oransje firkant overtar din skjermen (og muligens skjule den andre klippet du opprettet), skal du se en ekstra linje i utdatapanelet: Legg merke til navnet det ble gitt? Dette er standardnavnet. Flash holder tellingen over hvor mange tilfeller bli opprettet (i løpet av livet av filmen, tror jeg) og bare gjelder en standard navnet "forekomst N Og det medfører: For referanse, her er det Hele script som det skal stå: Å kunne lage og legge Displayobject ved kjøretid er en kraftfull teknikk for Flash, og åpner opp døren for dynamiske skjermer, så vi får se ved slutten av opplæringen Forståelse dybde i seg selv er ikke så vanskelig: alle visningsobjekter er lagvis i en "stabling orden". Et objekt med en høyere dybde vil "være på toppen av" og skjule et objekt med et lavere dybde. Og det er ikke vanskelig å huske på at containere har sitt eget sett med dybder for sine barn. En MovieClip full av figurer vil stable figurer i orden. Sett som MovieClip oppå hverandre MovieClip full av figurer, og alle Hva blir vanskelig er å forstå hvordan Actionscript 3 håndterer dybde. Men selv det er ikke så ille, og du kan være interessert i å vite at det er måten Først bør du vite at den laveste dybde på noen beholder er 0. Det er ingen negative dypet. For det andre, i dypet av en gitt container er alltid tett pakket For det tredje, forstår at Action administrerer denne tett-pakket nummersystem for deg. Hver gang du legger til et barn til en container, er at barnet settes inn i bunken som et enkelt kort blir satt tilbake i kortstokken. Et barn som blir lagt på en viss dybde skyver alle barna på dybde og høyde oppover i stablingsrekkefølgen. Et barn som er fjernet fra en viss dybde fører alle barna over til å gli ned igjen for å fylle gapet. Og til slutt, bør du lære noen av metodene vi kan bruke til å manipulere barn en container. addChild er den enkleste måten å legge til en Displayobject. Du bare kalle den av beholderen som du vil legge til, og passerer i Displayobject. Dette setter automatisk barnet øverst i bunken. Vi så dette i det siste trinnet. Vi hadde en MovieClip på scenen allerede før vår kode løp, og da brukte vi addChild på vår nye Sprite. Dette satte Sprite på dybde 1, over MovieClip. addChildAt ligner addChild, bare du kommer til å spesifisere indeksen ved å legge barnet. Hvis vi endrer forrige trinn kode for å lese: Vi vil legge til at sprite på dybde 0. Siden MovieClip var allerede på dybde 0, det blir bumped oppover til dybde 1, og Sprite går i mot dypet 0. Hvis du kjører den filmen, vil du se sprite på bunnen, og en endring i produksjonen: removeChild og removeChildAt arbeidet mye som deres "legge" counter deler. removeChild spesifiserer barnet til å fjerne, akkurat som addChild. removeChildAt er litt annerledes, i alt du trenger er dybden nummeret. Uansett hva barnet er på den dybden blir fjernet. For eksempel å bygge på vår forrige eksempel, kan vi fjerne MovieClip vi lagt i IDE: eller Begge er nyttige for forskjellige ting ... noen ganger du vet nøyaktig hvilke klipp for å fjerne, noen ganger du bare ønsker å fjerne barnet som er på bunnen eller på toppen. getChildAt gir en måte å få tilgang til barn av en container. I dette tilfelle vil vi få det ved dybde. Vi brukte dette i starten av vår nåværende FLA eksempel vil få en henvisning til MovieClip vi plassert med IDE (med mindre, selvfølgelig, vi har allerede fjernet det) getChildIndex gir oss dybde verdien av den medfølgende barnet objektet setChildIndex tar et barn objekt og en ny dybde indeks og swapper dypet rundt for å imøtekomme forespørselen. Igjen har denne effekten lik moviing et enkelt kort rundt i en kortstokk. De mellomliggende barn får raste rundt for å gjøre plass og fylle gapet. Det er flere metoder, for å manipulere dybder og mer. Sjekk ut dokumentasjon av Display klassen for mer informasjon Det er tre måter å ikke se en gitt skjerm objekt: sett det er alfa til 0, setter sin synlighet til falsk, eller gi det til removeChild. Hva er forskjellen mellom disse? Glad du spurte. Stille alfa til 0 vil gjøre det slik at øynene ikke kan se objektet. Men det er fortsatt til stede. En alpha fra 0 er som den usynlige mannen: du kan ikke være i stand til å se ham, men du kan fortsatt kjøre inn i ham. Hvis du har en MovieClip med mus hendelser koblet opp til det, og sette alfa til 0, vil du fortsatt se dem mus hendelser utløser. Dette kan være nyttig for å lage en hit område som utløser hendelser andre steder i filmen. Hvis målet ditt er å rett og slett ikke se objektet, deretter en alpha fra 0 er fortsatt problematisk fordi den renderer er fortsatt tegning objektet . Effekten er at du ikke kan se det, men Flash er fortsatt arbeider med å gjengi gjennomsiktig piksel. Det er bedre å sette synligheten til false. Stille synlig eiendom til falske resultater i å fjerne displayet objektet fra rende køen, så hvis du har falmet en gjenstand borte, når du er ferdig med det du bør sette synlig for falske. Men det er en usynlig skjerm objekt fremdeles litt av en usynlig mann, som tar opp plass. Kanskje behandle det som en gass element er mer hensiktsmessig. Det trenger ikke pådra hendelser, men det tar opp en plass i dybden stabelen, og dens dimensjoner påvirke dimensjonene av beholderen sin. Ellers er det ganske godt fraværende. Når du fjerner et barn, kan du fortsatt henge på den i en variabel. Den eksisterer fortsatt i minnet, og du kan da ringe addChild med det på noe tidspunkt å sette den tilbake på skjermen List. Men hvis du ikke har noen annen referanse til det når du ringer removeChild, blir objektet kvalifisert for søppelrydding, og vil bli slettet helt hvis du ikke henge på den. Det er en tid og plassere for hver av disse teknikkene, og en god Action utvikleren vet når man skal bruke som. Det er en god roundup av de tre teknikkene diskuteres av Colin Moock på InsideRIA En av de kuleste tingene vi kan gjøre er å kombinere det visuelle uttrykket verktøy av Flash IDE og dynamicism av en kode-drevet Vis liste. Vi kan lage et symbol i Flash, sette den opp slik at Actionscript har tilgang til den, og deretter opprette forekomster av disse symbolene med kode. La oss sjekke det ut. Først tegne noen skisser og gjøre den om til et symbol. Men når du får dialogvinduet til å opprette symbolet, sørg for at vinduet ser slik ut: I stedet for dette: Hvis det ser ut som mindre vindu, klikk deretter på " Advanced "knappen for å gjøre det større vindu. Nå, Klikk på avkrysnings som sier," Export for Action ". Når du gjør det, blir hele "Kobling" -delen aktivert Teksten legges inn i. "Class:" -feltet vil være basert off av navnet du skrev inn navnet. Hvis du ønsker å endre det, husk at visse regler gjelder. I utgangspunktet må det være en gyldig Actionvariabelnavn: tall, bokstaver, understreker og dollartegn bare, og det kan ikke begynne med et tall La alt annet som er, og klikk OK.. Du bør få dette varselet: Når du får dette vinduet, det er å si noe som du ikke trenger å bekymre deg for akkurat nå. Men, vil du ønsker å vite om dette til slutt (vi skal snakke om det i en fremtidig AS3 101 episode). Jeg vil råde deg til å motstå fristelsen til å sjekke "Ikke varsle meg igjen" alternativet. For nå, trenger du ikke denne advarselen, men det vil komme en tid når du vil denne advarselen, fordi du vil ha forventet noe annet å skje. Du kan imidlertid slå denne advarselen av og på ved å gå inn dine preferanser, inn i "advarsler" -delen, og sjekke "Warn på automatisk generere Action klasser for tidslinjer" alternativet. Så, hva gjorde alle det gjøre? Det ga oss tilgang til det symbolet gjennom Actionscript. Navnet du skrev i "Class" -feltet er navnet du må bruke for å opprette et nytt symbol med kode. For eksempel, gikk jeg "Box" i min klasse feltet, så nå kan jeg skrive dette skriptet: Kjør den, og du vil se minst ett tilfelle av ditt symbol på skjermen (kan det allerede være der fra da du opprettet den). Poenget er at vi utførte Action tilsvarer dra som symbol ut på scenen i IDE Dette er utrolig nyttig.; den kombinerer det praktiske ved å opprette en MovieClip hjelp av visuelle verktøy av IDE med de dynamiske egenskapene til å plassere ting på scenen med kode. Tenk deg hvis du har en miniatyr klippet, som er mer enn bare en ladd bilde; kanskje det har en etikett, og litt ekstra skisser for en rollover effekt. Du kan sette opp klippet lett i IDE og deretter opprette så mange du trenger med Actionscript. Faktisk vil vi gjøre akkurat dette på bare noen få skritt Egentlig, i Actionscript, trenger foreldrene forstår. Tilgi rare tittelen. Saken om visningsobjekter er at hvis du har lagt til en som barn, enten gjennom IDE eller gjennom koden, deretter at objektet har en forelder Hvis du kjører denne filmen, vil du se hva du forhåpentligvis forventet: the Box på skjermen. The Box arver x stilling satt av parent1, siden vi la det til som et barn til som Sprite, så boksen skal være 100 piksler over fra venstre kant. Nå, la oss legge denne, etter at manuset vi bare skrev: Nå kjører filmen, og boksen er i samme plass. Men nå klikke på boksen, og det vil flytte! Hvorfor? fordi vi har re-parented Denne ideen er ganske kraftig, og noe som gjør at du kan gjenbruke visningsobjekter som du ellers ville ha til å ødelegge og gjenskape, som er langt mindre effektiv. Dette re-foreldre teknikken er trolig mest brukes når du bruker Laste. En Loader er, i seg selv, en skjerm objekt. Så du kan legge Laste til Vis liste. Den Loader objekt har, som sin barn, en annen skjerm objekt som er det faktiske lastet innholdet er. Så, kan du finne det praktisk å bruke en Loader utelukkende som en lademekanisme, og når innholdet er lastet, reparent Loader innhold inn i en annen container. Dette ville unngå overhead av å ha en beholder (Loader) som ellers ikke legge noe til skjermen. Et enkelt eksempel: For å bryte dette ned, første skaper vi en Sprite som til slutt vil inneholde lastet bildet. Da skaper vi Loader, laste et bilde, og legge til hendelsen lytteren for COMPLETE hendelse (merk at Loader hendelser er assosiert ikke med Loader selv , men med Loader er contentLoaderInfo eiendom. Det er rart, men det er slik det er. Jeg har problemer med å huske det, også, så ikke føler seg dårlig når du får det galt). Den re-foreldre skjer i COMPLETE hendelsesbehandling. Vi kan faktisk ikke gjøre det før da, så ha det i bakhodet. Men alt vi gjør er å fortelle bildet beholder Sprite å legge Loader innhold objekt som barn. Innholdet er Loader barn Displayobject. Men uten denne linjen, vil skriptet ikke vise lastet bilde fordi Loader aldri ble satt til Vis liste. Sprite, men var, og slik at vi kan implisitt legge lastet bildet til Vis liste, også, ved å legge den til Sprite. Husk at selv om dette er en nyttig teknikk, er det ingen regel som sier at du må gjøre det på denne måten. Det er helt greit å bare lage den Loader og legge det Et siste tema for diskusjon før vi kommer til den praktiske eksempel. Alle visningsobjekter har en egenskap kalt scenen og en som heter root. Hvis du er vant til Actionscript 2, disse begrepene høres kjent ut, men har blitt overhalt i Actionscript 3. The Stage er det øverste, grand-pappa, råeste-of-dem-all Display. The Stage representerer utgangspunktet lerretet der Flash Player trekker. Alle andre movieclips, bilder, tekst, etc, blir til slutt lagt til Stage. Som et resultat, er det bare ett trinn. Og alle synlige visningsobjekter har som forelder, enten direkte eller gjennom en avstamning av foreldre, Stage. Scenen Eiendommen gir tilgang til denne spesielle container. Hvorfor gjør det noe? Fordi med scenen kan man få muse posisjon i forhold til den Flash Player, i motsetning til i forhold til skjermen angjeldende gjenstand. Du kan også legge hendelsen lyttere til scenen, som MOUSE_MOVE eller MOUSE_UP. Tenk på dette: Prøv det ut (forutsatt at du har fortsatt the Box i biblioteket). Nå flytter musen rundt ... merke til hvor sporene oppstå. Scenen Arrangementet vil skje hele tiden. Men boksen arrangementet vil bare skje når musen er faktisk over boksen. Så hvis du ønsker å lytte etter mus bevegelse generelt, og ikke bare når musen skjer for å være i et bestemt område, bør du lytte til scenen. Roten er en annen spesiell beholder, men ikke på langt nær så spesiell som scenen. Roten er faktisk den viktigste tidslinjen til enhver SWF. Når du oppretter en Flash dokument, blir du alltid presentert med en tidslinje, som er det øverste nivået tidslinje. Du kan alltid opprette flere movieclips med flere tidslinjer, og legger dem i en hierarki, men det er alltid en hovedtidslinjen. Dette er roten. Men det er ikke alltid bare være en rot. Når du oppretter to SWF, og legger en til den andre, betyr rot forskjellige ting avhengig av hvor koden er referert. Det vil si at hver av de to SWF har sin egen hovedtidslinjen, og rot i SWF en henviser til hovedtidslinjen av SWF 1, mens rot i SWF to henviser til hovedtidslinjen til SWF 2. Så, det kan bare være en scene, men det er så mange røtter som det er SWF lastet inn for øyeblikket Nå, før vi forlater dette emnet, er det svært viktig å forstå ett poeng. En skjerm objektets scenen og rot egenskaper er bare Den første spor vil produksjonen [objekt Stage], mens den andre vil være null, fordi sprite2 aldri ble satt til Vis liste. Dette er en vanlig kilde til feil i mer kompliserte prosjekter. Noen ganger kan du forvente scenen for å bli satt, men objektet er ikke blitt lagt til Vis liste ennå, slik at du får null referansefeil. Bare noe å være klar over. Vi kommer til å ta på seg et prosjekt som vil utsette oss for så mange reelle Skjerm Opp temaer som jeg kunne stappe inn i en enkelt opplæringen.
vises på Skjerm List. For eksempel er den gode gamle MovieClip en type Displayobject. Imidlertid er en Array ikke. Actionscript 3 definerer ganske mange typer fremvisbare objekter, og du kan definere din egen, når det skjer. Følgende er en liste over DisplayObjects levert av Flash Player:
Shape En form kan vise vektorgrafikk. Hvis du tegner en figur på scenen og publisere SWF, er at formen representert i Action som Shape objekt. Du kan arbeide med figurer auto hvis du ønsker å lage vektorobjekter med kode.
DisplayObjects kan utføre visse skjermrelaterte oppgaver. Dette inkluderer, men er ikke begrenset til:
Innstilling av stilling (gjennom x og y egenskaper, og i Flash Player 10, z)
Stille rotasjon (og i Flash Player 10, den rotationX, rotationY, og rotationZ)
Innstilling av skalaen (via høyde, bredde, scaleX og Scaley egenskaper)
Stille alpha
Stille blendMode
Innstilling filtre
Bruk en maske
Performing hit tester (gjennom hitTestObject og hitTestPoint)
mer enn en form, det krever mer minne bare å eksistere. Hvis alt
du trenger å gjøre er å vise en vektor form, og ikke rote rundt med musa interaktivitet eller tidslinjer, bør du bare bruke en form, og ikke en MovieClip
Trinn 3.: Den InteractiveObject
Textfield Du ville ikke forvente en Textfield å være interaktiv, men hvis Textfield er en inngang felt, så det kan svare på brukerhendelser, som endringer i maskinskrevet -i tekst. På samme tid, kan du bestemme når brukeren fokuserer og de-fokuserer Textfield.
Ha en contextmenu
motta mus hendelser fra brukeren
motta viktige hendelser fra brukeren
være fanebasert til med tab-tasten
Trinn 4: ". Display" The Display
andre visningsobjekter gjør det til en Display. Denne ideen om containment
er hva Display legger til bordet. Stort sett alt er definert av Display har å gjøre med å styre barne
objekter av den beholderen. En beholder kan inneholde en annen beholder, som du kanskje kjenner fra Flash-filer med svært nestet MovieClip strukturer. DisplayObjectContainers kan:
legge barn
fjerne barn
få referanser til sine barn
administrere dypet (stabling rekkefølge) av sine barn
aktivere eller deaktivere mus eller tabbe for alle sine barn på en gang
Sprite Du kan tenke på en Sprite som MovieClip uten en tidslinje. Det kan dras, lyd har forbundet med det, display programma trukket vektorgrafikk, og endre sin interaktive atferd med ting som useHandCursor og hitArea. De fleste av UI komponenter som leveres med Flash er Sprites (og ikke movieclips)
MovieClip er den du kjenner og elsker. Du kan tenke på en Sprite som MovieClip uten en tidslinje, eller du kan tenke på en MovieClip som en Sprite med en tidslinje. En MovieClip kan gjøre alt som en Sprite kan gjøre, pluss det legger egenskaper og metoder for å arbeide med sin tidslinje (som gotoAndStop, currentFrame, etc).
Trinn 5:. Arbeide med Displayliste Visuelt
Var len: int = this.numChildren; for (var i: int = 0; i < len; i ++) {var display: Displayobject = this.getChildAt (i); trace (display.name);}
Trinn 6:. Arbeide med Displayliste auto
Var sprite: Sprite = new Sprite (); sprite.graphics.beginFill (0xff9933, 1. ); sprite.graphics.drawRect (0, 0, 200, 200);
this.addChild (sprite);
" for alle nye visningsobjekter. Dette navnet kan settes til enhver tid, skjønt. Det er ikke nødvendig, men det kan være nyttig å gi din auto opprettet skjerm objekter et unikt navn slik at du enkelt kan identifisere dem senere, enten gjennom spor eller når du bruker getChildByName. La oss legge til følgende linje (fortsatt før løkken, men etter at spriten blir opprettet);
sprite.name = "OrangeBox";
Var sprite: Sprite = new Sprite (); sprite.graphics.beginFill (0xff9933, 1); sprite.graphics.drawRect (0, 0, 200, 200); sprite.name = "OrangeBox"; this.addChild (sprite); Var len: int = this.numChildren; for (var i: int = 0; i < len, jeg ++) {var display: Displayobject = this.getChildAt (i); trace (display.name);.}
Trinn 7: Forstå Dybde
av de beste MovieClip sin figurer vil være på toppen av bunnen MovieClip s former. Det er ingen interlacing av barn av en container med barn av en annen container.
bedre enn hvordan Actionscript 2 håndtert dybde.
. Det betyr at det ikke er noen tomme plasser i dybde tallene. Hvis det er 10 barn, okkuperer de dybder fra 0 til 9, uten unntak.
this.addChildAt (sprite, 0);
this.removeChildAt (1);
this.removeChild (manualClip);
this.getChildByName ("manualClip");.
Trinn 8:. Alpha, Synlig, og være på Vis liste
Trinn 9:. Opprette forhåndsdefinerte DisplayObjects fra biblioteket
Var boks: Box = ny Box (); addChild (boks);
Trinn 10:. Foreldre forstår ikke
. Men i motsetning til dine eller mine foreldre, du kan vilkårlig tilordne foreldre-barn-forholdet som trengs. Dette omfatter ikke bare addChild og removeChild metoder vi har allerede sett på, men tanken på re-foreldre
. Dette kommer bare ned til bruken av addChild på en skjerm objekt som allerede har en av foreldrene til å sette den inn i en annen forelder. Vurdere følgende. Det forutsetter at du har Box symbol i biblioteket
Var parent1. Sprite = new Sprite (); parent1.x = 100; addChild (parent1); Var parent2: Sprite = new Sprite (); parent2.y = 100; addChild (parent2); Var boks: Box = ny Box (); parent1.addChild (boks);
box.addEventListener (MouseEvent.CLICK, reparentBox), funksjon reparentBox (meg: MouseEvent): void {parent2.addChild (boks);}
det. Vi har spurt parent2, med en x fra 0 og ay på 100, for å være den overordnede av boksen nå. Dette fjerner implisitt boksen fra å være et barn til parent1. Og så snart parent2 blir boksen foreldre, arver boksen posisjonen (sammen med alle andre relevante egenskaper, som alfa eller rotasjon) av parent2, så nå bør det være langs venstre kant og 100 piksler ned fra toppen.
Var imageContainer: Sprite = new Sprite (); imageContainer.x = 100; imageContainer.y = 100; addChild (imageContainer); Var loader: Loader = new Loader (); loader.load (ny URLRequest ("someImage.jpg")); loader.contentLoaderInfo.addEventListener (Event.COMPLETE, onImageLoad), funksjon onImageLoad (e: Hendelses): void {imageContainer.addChild (loader.content);}
til Vis liste. Men det vil være ganger når du må beholderen allerede, og du vil kanskje fjerne den ekstra overhead. Eller kanskje du vil Sprite evne til å ha, sier buttonMode satt til true, som Loader ikke kan gjøre
Trinn 11:. Scenen og rot
Var boks: Box = ny Box (); addChild (boks); box.addEventListener (MouseEvent.MOUSE_MOVE, boxMouseMove); stage.addEventListener (MouseEvent.MOUSE_MOVE, stageMouseMove), funksjon boxMouseMove (meg: MouseEvent) : void {trace ("musen flytte på boksen")} funksjon stageMouseMove (meg: MouseEvent): void {trace ("musen beveger seg på scenen")}
satt når skjermen objektet er på Vis liste. Hvis det ikke er det, da disse egenskapene er null. For eksempel:
Var sprite1: Sprite = new Sprite (); addChild (sprite1); Var sprite2: Sprite = new Sprite (); trace (sprite1.stage); trace (sprite2.stage);
Trinn 12 : Vår misjon