Alt du kunne ønske å vite om Import Statements *

Everything du kunne ønske å vite om Import Statements *
Del
Del
Share
Del
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: OOP - Tilleggs ConceptsAS3 101:.. OOP - Introduksjon til grensesnitt

* Ikke egentlig alt



Import Kreves **

I de AS2 dager, kan du komme rundt å måtte skrive en import uttalelse ved å bruke den fullstendige klassenavnet i klassen kroppen ( slik som flash.display.Sprite i motsetning til bare sprite). Mens du er velkommen til å bruke fullt kvalifisert klassenavnet som du skriver koden, import uttalelser for hver klasse er påkrevd
i AS3.

Så det er ikke en hel masse behov for å skrive fullt kvalifiserte klassenavn, med mindre du tilfeldigvis bruke to klasser som deler samme kortnavn innenfor samme klasse - kanskje hvis du bruker Flash kamera klasse sammen med en 3D bibliotekets Kamera klasse.


** Med mindre klasse er i samme pakke

Unntaket til forrige regelen er hvis klassen du bruker og klassen du skriver er både < em> i samme pakke
. Alle klasser i en pakke er implisitt tilgjengelige for hverandre, uten innførsels uttalelse

Det er fortsatt ikke en dårlig idé å skrive import uttalelsen uansett, fordi:.


Importer Statements er selvdokumenter Kode

Ved å liste alle dine import, oppretter du et slags manifest av hva andre klasser klassen er avhengig av for å kunne gjøre jobben sin. Det kan virke som en triviell ting, men denne informasjonen kan faktisk være ganske nyttig. Tenk deg følgende klasse ***:
pakken com.activetuts {import com.activetuts.SuperTrace; import com.activetuts.ActiveTween; public class QuickTip {offentlig funksjon QuickTip {var tracer: SuperTrace = new SuperTrace (); tracer.log ("Quick Tip"); Var tween: ActiveTween = new ActiveTween (); tween.go (); }}}

*** Forhåpentligvis er det åpenbart at denne klassen er illustrerende, ikke funksjonell.

Hvis du deretter bruke denne QuickTip klassen, Flash vil automatisk sørge for at SuperTrace og ActiveTween klasser er også samlet i den resulterende SWF, fordi du brukte QuickTip, og QuickTip krever disse klassene.

Enkelt nok, men nå vurdere mer realistiske klasser som bruker dusinvis av andre klasser. Hvis du trenger å vite hvilke klasser er i bruk, kan en rask titt på import delen gir deg en anstendig idé. Det er ikke uttømmende, og det er litt misvisende selv, men du vil bli hardt presset til å finne noen som mener at selv dokumentere koden er en dårlig ting.


flash Classes Trenger Importere, men er ikke kompilert

Det er en vanlig misforståelse rundt ideen om at det å bruke massevis av klasser betyr nødvendigvis filstørrelsen på din SWF vil øke. Normalt, det er sant. Men alle klasser som starter med flash er en gitt av Flash Player, og vil ikke ha noen effekt på størrelsen på SWF. Byte kode for, sier, er Sprite finnes i Flash Player, og du er bare å registrere at du vil bruke en Sprite, ikke bundling at byte kode inn i SWF. Dette er slags poenget med å ha Flash Player.

Jeg forventer ikke at du skal tro meg på dette. Jeg forventer at du er litt vantro, og kreve bevis. Jeg ønsker deg velkommen til å bevise dette for deg selv, ved å gjøre følgende:


    Opprett en ny FLA og tilhørende dokumenter klasse

    I dokumentet klassen, skriver minimum deg. må faktisk definere det som et dokument klasse:
    pakke {import flash.display.Sprite; public class Document strekker Sprite {offentlig funksjon Document () {}}}

    Åpne opp Publiser Innstillinger ved å trykke Tilvalg-Skift-F12 /Alt-Shift-F12 (eller ved å velge Fil > Publish Settings .. .).

    Klikk på "Flash" -kategorien.

    I "Advanced", kryss av "Generer størrelse rapporten" alternativet.

    Også i " SWF-innstillinger ", kryss av" Export SWC "alternativet, en un
    sjekke" Inkluder XMP metadata "alternativet (dette siste alternativet fjerner en haug med metadata fra SWF som blåses opp størrelsen på SWF og også gjøre et rot av størrelsen rapporten vi skal se på).

    Trykk Kontroll /Kommando-Enter for å Test Movie.

    Trykk Kontroll /Kommando-B for å åpne opp båndbredde Profiler (også tilgjengelig under View > båndbredde Profiler mens du ser på SWF)

    Legg merke til antall byte dette SWF er (mine er for tiden 354, din kjørelengde kan variere, men det vil være i det omtrentlig). Sørg for å notere bytes, og ikke kilobyte. Husk dette nummeret.

  1. Lukk SWF.
  2. Rediger dokumentet klassen til å bruke en haug med flash klasser. For eksempel:.
    Pakke {import flash.display *; import flash.media. *; import flash.net. *; import flash.text. *; public class Document strekker MovieClip {offentlig funksjon Document () {var l: Loader = new Loader (); l.load (ny URLRequest ("someasset.swf")); Var tf: Textfield = new Textfield (); Var format: tekstformat = new tekstformat ("Verdana"); format.align = TextFormatAlign.CENTER; tf.defaultTextFormat = format; Var v: Video = new Video (); Var s: Sound = new Sound (); Var kanal: SoundChannel = s.play (); }}}

    Vi bruker ganske mange klasser, som selv innlemme enda flere klasser. Alle disse klassene, skjønt, er flash klasser.

  3. Test Movie igjen. Båndbredden Profiler bør fortsatt være åpen fra forrige gang; hvis ikke, åpner den igjen

    Legg merke til størrelsen på SWF. Jeg rapporterer 596 bytes med koden ovenfor, en økning på 242 bytes. Det er ikke mye med tanke på at jeg bruker MovieClip (som strekker seg en hel haug med andre klasser), Loader, URLRequest, Textfield, tekstformat, TextFormatAlign, Video, lyd og SoundChannel. Det er mye funksjonalitet for 242 bytes.
  4. I utdatapanelet, vil du se noe sånt som følgende (hvis du brukte koden ovenfor ordrett, vil du også se lyd og belastningsfeil, men de er ikke viktig):
    flash-test.swf Movie Rapporter ---------------------------- Frame # Frame Bytes Total Bytes Scene ------- ----------- ----------- ----- 1 598 598 Scene 1 (AS 3,0 Classes Export Frame) Scene Shape Bytes Tekst Bytes Action Bytes ------- ----------- ---------- ---------------- --Scene 1 0 0 546ActionScript Bytes Sted ------------------ -------- 546 Scene 1: Ramme 1: Dokument
    < p> Denne testen skal illustrere at selv om vi har brukt mange Flash-forut klasser, er den resulterende størrelsen på våre SWF forholdsvis liten. Beviset kommer med størrelsen rapporten, men der ser vi ingen oppføringer for noen av de innebygde klasser. Vi ser vår Document klasse, men ingen andre klasser, og at en klasse er ansvarlig for alle
    Action bytes.

    Hvis dette ikke er nok bevis for deg, gjerne utvide forsøket. Du kan legge til enda flere Flash-forut klasser, mens måle økningen i størrelsen på SWF som fremdeles være bare et spørsmål om bytes. Du kan innlemme klasser av dine egne, og sørge for at de vises i listen over klasser, og også påvirke størrelsen på SWF på en mer tydelig måte. For eksempel, jeg opprettet denne enkle Test Klasse:
    pakken {public class Test {offentlig funksjon Test () {trace ("TEST"); }}}

    Inkludert denne singelen, 7-linje klasse, som bruker ingen andre klasser seg selv, dunket min test SWF til 717 bytes, en økning på 121 bytes. Denne økningen er halvparten av økningen vi så når du legger alle disse flash klasser; byte-til-funksjonalitet forholdet skulle tilsi at blits klassene ikke lagt inn i din SWF

    Merk også at du får se en ekstra oppføring i størrelse rapporten for ekstra klasse.; noe sånt som dette:
    flash-test.swf Movie Rapporter ---------------------------- Frame # Frame Bytes Total Bytes scene- ------ ----------- ----------- ----- 1 719 719 Scene 1 (AS 3,0 Classes Export Frame) Scene Shape Bytes Tekst Bytes Action Bytes ------- ----------- ---------- ------------------ Scene 1 0 0 673ActionScript Bytes Sted ------------------ -------- 179 Scene 1: Ramme 1: Test 494 Scene 1: Ramme 1: Dokument

    Moralen i historien: gjerne bruke så mange flash klasser som du ønsker ****. De vil ikke påvirke størrelsen på SWF (selv om koden som bruker
    disse klassene vil selvfølgelig)

    **** Husk at komponenter og Flex klasser er ikke gitt av Flash Player. Disse klassene ser ut til å bli integrert, men hvis pakken ikke begynner med flash, da det ikke er gitt av spilleren.


    joker Importen er ikke Ineffektiv

    Jeg er lei for dobbel-negativ *****, men dette er en annen vanlig misforståelse at jeg ønsker å rydde opp.

    Først en rask definisjon. Et joker import er en som ser slik ut:.
    Import flash.display *;

    Dette gjør tilgjengelig alle klasser innenfor flash.display pakken. Dette er kortform sammenlignet med (for eksempel):
    import flash.display.Bitmap, import flash.display.BitmapData, import flash.display.BlendMode, import flash.display.Graphics, import flash.display.Sprite;

    Nå misforståelse. Når jeg sier, "dette gjør tilgjengelig alle klasser," Jeg trenger ikke bety at hver
    klasse i at pakken blir automatisk lagt inn i din SWF. Jeg mener at enhver klasse i den pakken er tilgjengelig for deg i korte navn skjema som du skriver klassen. Så i det foregående eksempel, ville jeg være fri til å skrive dette:
    Var sp: Sprite = new Sprite, Div g: Grafikk = sp.graphics; g.beginFill (0); g.drawRect (0, 0, 100 , 100); sp.blendMode = BlendMode.MULTIPLY;

    Denne koden bruker Sprite, grafikk, og BlendMode, som alle er i flash.display pakken, og som alle må importeres. Enten tilnærmingen har det samme resultat. Føl deg fri til å bruke joker import.

    Igjen, et enkelt eksperiment for de som krever bevis. For dette eksperimentet, trenger vi ikke-flash klasser. Du må ha eksterne klasser tilgjengelig, enten de du har skrevet, eller noe sånt Papervision3D eller TweenMax. Jeg vil ikke komme til å laste ned og installere disse pakkene, men i forbindelse med min eksempelkode Jeg skal bruke en enkel pakke med fire klasser er opprettet for dette formålet. Du kan finne dem, sammen med testfiler, i nedlastingspakken, i "wildcard-import" -mappen. Klassene er i biblioteket pakken.


      Opprett en ny FLA, og tilhørende dokumenter klasse.
    1. I koden din, importere en enkelt klasse. For eksempel:
      import library.One

      Og sørg for å bruke den, for eksempel med
      Var o:. Ett = new One ();

      Test Movie ( trykk på Kommando-retur Twitter / Ctrl-Enter
      , eller gå til Control >. Test Movie
      )

      Åpne Båndbredde Profiler med SWF kjører (trykk på Kommando-B Twitter / Kontroll-B
      eller gå til View > båndbredde Profiler
      )

      Legg merke til størrelsen på SWF ( igjen, i byte, ikke kilobyte).

      Lukk SWF

      Rediger dokumentet klassen slik at import bruker et wild card i stedet. For eksempel:..
      Import bibliotek *;

      Test Movie igjen

      Legg merke til størrelsen på SWF. Det bør være identisk som sist.
    2. Du kan også aktivere størrelsen rapport (ikke glem å slå på SWC alternativet og slå av XMP-alternativet) for å se hvilke klasser får kompilert. Anmeldelser

      Dette skulle tilsi at selv om det liksom ser ut som vi importerer alt
      fra pakken, vi egentlig bare å samle de klassene vi faktisk bruker.

      ***** Nei, jeg er ikke


      En Import erklæringen alene vil ikke kompilere klasse

      Det er, i dette følgende hypotetiske eksempel:
      pakke {import SuperTrace; import ActiveTween; public class QuickTip {offentlig funksjon QuickTip () {}}}

      De SuperTrace og ActiveTween klasser er importert. Men de er aldri brukes
      innenfor klassen. Flash kompilatoren er vanligvis smart nok til å finne ut av dette, og finne ut at disse to klassene trenger ikke være kompilert for QuickTip klassen.

      Selvfølgelig, hvis en annen klasse gjør bruk SuperTrace klassen, så vil det bli utarbeidet . Poenget er at kompilatoren er ganske god til ikke inkludert unødvendige klasser i SWF

      Du kan bevise dette ved å sette opp en test lik de tidligere tester. Sammenligne både byte størrelse og størrelsen rapporter om to- SWFs som er identiske bortsett fra bruken av en importert klasse. Du kan se et slikt eksempel ved å sammenligne "import-uten-bruk" og "import-med-bruk" prosjekter som inngår i kilde zip.

      Om for noen grunn, må du sørge for at SuperTrace og ActiveTween klasser kompilere, selv om du ikke bruker dem i denne klassen, kan du tvinge at ved bare henviser dem i kroppen av klassen. For eksempel:
      pakke com.activetuts {import com.activetuts.SuperTrace; import com.activetuts.ActiveTween; public class QuickTip {offentlig funksjon QuickTip {SuperTrace; ActiveTween; }}}

      Det er nok til å få kompilatoren å se disse som trengs klasser, selv om linjene ikke gjør mye når koden kjøres. Anmeldelser