Quick Tips: Forstå getDefinitionByName ()
Del
Del
to
Del
Dette Cyber Mandag Envato Tuts + kurs vil bli redusert til bare $ 3. Ikke gå glipp av.
I denne hurtig Tip, vil du lære hvordan du kan lage en referanse til en klasse fra en String, og deretter opprette en forekomst av denne klassen, ved hjelp av en innebygd AS3 funksjon kalt getDefinitionByName (). Du vil også lære de beste metodene for å bruke dette i ulike situasjoner.
Hvorfor er getDefinitionByName () Nyttig?
getDefinitionByName () er veldig nyttig hvis du trenger å få nye tilfeller av klasser ved hjelp av en String. For eksempel, hvis du hadde syv forskjellige fliser - hver representert ved en klasse kalt flis1, Tile2, osv - og du trengte å opprette en forekomst av hver, ville du må skrive inn følgende kode:
privat funksjons createTiles (): void {var flis1: flis1 = new flis1 (); Var tile2: Tile2 = new Tile2 (); Var tile3: Tile3 = new Tile3 (); Var tile4: Tile4 = new Tile4 (); Var tile5: Tile5 = new Tile5 (); Var tile6: Tile6 = new Tile6 (); Var tile7: Tile7 = new Tile7 (); stage.addChild (flis1); stage.addChild (tile2); stage.addChild (tile3); //Du får ideen, det er veldig lang!}
getDefinitionByName () kan du løse dette problemet!
Hvordan bruke det
Nå koden ovenfor var litt rotete og vi måtte skrive mange linjer bare for å gjøre noen forskjellige fliser. Dette er hvordan vi kan oppnå samme mål ved hjelp getDefinitionByName ():
private funksjons createTiles (): void {for (var i: int = 1; i < 8; i ++) {var tileRef: Class = getDefinitionByName (" tile "+ i) som klasse; Var flis: Sprite = new tileRef (); stage.addChild (flis); }}
I linje 6, getDefinitionByName () returnerer en referanse i klassen som heter "Tile + den nåværende verdien av jeg i for-loop (Vi kan ikke skrive Var flis. TileRef fordi tileRef ikke refererer til noe ved kompilering, hvis du prøver, vil du få en kompilator feil .) Men når du kjører denne koden, det vil ikke fungere! Du får en variabel er udefinert feilmelding, i de fleste tilfeller, fordi "flis1" kanskje ikke er nok informasjon for Flash for å finne den klassen. La oss se på noen løsninger. Det er noen ofte brukte metoder for å løse problemet med variabelen er udefinert feil du får når du kjører koden ovenfor, og jeg kommer til å lære deg hva de er. Jeg vil også gjerne gi kreditt til Gert-Jan van der brønn Gulvplanlegger Tech Blog for dette blogginnlegget Her er noen av de metoder du kan bruke. I denne metoden, du bare lage noen dummy variabler med referanser til de klassene du vil referere til med getDefinitionByName () senere: Dette fungerer, men det er veldig stygg. Hvis du har de Tile klasser i en annen pakke, vil du også nødt til å importere dem! Dette er mye som Dummy Variable metoden, men du trenger ikke bry å sette opp en dummyvariabel for hver klasse; du bare droppe noen eksplisitte referanser til klassene selv: Nå dette kan se penere, men det faktum at du er nødt til å oppdatere denne listen hver gang du gjør en ny Tile gjenstår. En annen metode, som er den tidiest (hvis du har klasser i en annen pakke) er å inkludere hele stien i String: Mye ryddigere! Men dette fungerer bare hvis klassene er i en egen pakke fra denne klassen. Hvis flisene er holdt i en SWC, kan du gjøre dette mye enklere, uten at du trenger å bruke noen import eller dummy variabler. Jeg vil gjerne gi kreditt til v0id fra Dreaming i Flash for dette blogginnlegget som forklarte meg hvordan man bruker denne metoden: Den PATH_TO_SWC må være den absolutte banen og ikke den relative banen Flott, alle disse metodene! har nå blitt forklart. Dessverre er det ingen fantastisk magiske metoder for å bruke hvis du har alle brikkene i samme pakke som alle de andre som filer. Jeg vil anbefale deg å gjøre en ny pakke kalt fliser eller noe hvis du vil bruke de gode metoder! Vel, i dag bør du ha lært å bruke getDefinitionByName () og de beste metodene for å bruke det. Jeg håper dette vil hjelpe deg i alle fremtidige prosjekter, og hvis du har noen spørsmål, la dem i kommentarfeltet nedenfor! Anmeldelser
". Så, når jeg er lik 1, getDefinitionByName ("Tile" + i); returnerer en referanse til klassen flis1. Vi deretter opprette flis og legge den til scenen
Make It Work
Bruk kort notasjon av klasse navn
Ta med hele banen i String
Ta med klassens SWC i prosjektet
Bruke Dummy Variable
private Var dummyTile1: flis1; private Var dummyTile2: Tile2; //etcprivate funksjons createTiles (): void {//Opprett flisene}
Short Notation
flis1; Tile2; Tile3; Tile4; Tile5; Tile6; Tile7; //etcprivate funksjons createTiles (): void {//Opprett flisene}
Inkludert Full banenavn
//La oss si at mine fliser er alle i pakken 'project.Tiles'private funksjons createTiles (): void {for (var i: int = 1; i < 8; i ++) {var tileRef: Class = getDefinitionByName ("project.Tiles.Tile" + i) som klasse; Var flis: tileRef = new tileRef (); stage.addChild (flis); }}
Ved hjelp av en SWC
I prosjektegenskaper velg "Actioniler"
til "Andre kompilatoren argumenter" -feltet, legge til følgende: include-biblioteker PATH_TO_SWC
Konklusjon