Rask Tips Bruk FZip til å åpne zip-filer innenfor AS3

I denne opplæringen vil jeg introdusere deg til FZip, et AS3-bibliotek som lar deg åpne zip-filer i dine Flash-prosjekter. Dette kan spare mye båndbredde; I denne opplæringen legger vi inn en 2,5 MB zip-fil som inneholder 9,3 MB verdier av eiendeler.


Endelig resultatforhåndsvisning

La oss se på det endelige resultatet vi skal jobbe for. Klikk her for å åpne en SWF som igjen vil laste en zip-fil full av bilder, og vise dem i et flislagt rutenett.

(Blurringen synlig på noen ikoner skyldes at Flash automatisk prøver å skalere dem opp til 32x32px, selv om disse bildene er 16x16px.)


Trinn 1: Få biblioteket og postarkivet

Du må grave en kopi av FZip biblioteket fra Claus Wahlers 'github.

Trekk ut biblioteket. Innenfor src-mappen er det en mappe som heter "deng"; kopier denne mappen til mappen der du vil lagre FLA.

Deretter trenger vi et zip-arkiv for å jobbe med. Jeg velger WooFunction ikon sett, tilgjengelig gratis fra woothemes.com.

Lagre dette i samme katalog hvor du vil lagre FLA.


Trinn 2: Opprett nytt Flash-dokument

Åpne en ny FLA og gi den følgende egenskaper:

  • Størrelse: 550x400px
  • Bakgrunnsfarge: Hvit

Lagre dette som fzip.fla.


Trinn 3: Legg komponenter til scenen

Gå til Vindu> Komponenter og dra en TileList-komponent til scenen.

Under "Komponentparametre" angir du følgende egenskaper:

  • Kolonner: 16
  • kolonnebredde: 32
  • ROWCOUNT: 8
  • rowHeight: 32

Gi TileList forekomstnavnet imageTileList, og sett inn følgende egenskaper i panelet "Plassering og størrelse":

  • X: 20
  • Y: 68
  • W: 100
  • H: 100

Deretter velger du Tekstverktøyet og sørger for at følgende egenskaper er angitt i "Character" -panelet:

  • Størrelse: 50pt
  • Farge svart

Dra nå en TextField på scenen, og gi den forekomstnavnet imagesLoaded. Pass på at TextField er satt til henholdsvis "Classic Text" og "Dynamic Text", og angi følgende egenskaper:

  • X: 54
  • Y: 161
  • W: 454
  • H: 60

Trinn 4: Opprett nytt AS3-dokument

Gå til Fil> Ny og velg "Actionscript File".

Lagre denne filen som Main.as.


Trinn 5: Pakke, import og konstruksjon

Innsiden Main.as legg til følgende:

 privat funksjon demonstrere (): void pakke import flash.display.MovieClip; importer deng.fzip.FZip; importer deng.fzip.FZipFile; importer flash.display.Loader; importere flash.net.URLRequest; importer flash.events. *; importer fl.controls.TileList; importere fl.data.DataProvider; offentlig klasse Main utvider MovieClip offentlig funksjon Main () setupZip (); 

Her importerte vi klassene vi trenger for denne opplæringen, og setter opp Hoved() konstruktør funksjon.


Trinn 6: Legg til variabler

Definer følgende variabler ovenfor offentlig funksjon Hoved ():

 privat var zip: FZip; // Instans av FZIP klasse privat var numFiles: int = 0; // Antall filer private var numFilesLoaded: int = 0; // Antall filer lastet privat var ferdig: Boolsk = false; // Ferdig behandling av zip-arkiv? private var tileListDp: DataProvider = new DataProvider (); // Datatilbyder for TileList

Her legger vi til noen variabler vi trenger gjennom hele opplæringen. Se kommentarene for deres bruk.


Trinn 7: setupZip ()

Legg til følgende nye funksjon nedenfor Hoved():

 privat funksjon setupZip (): void zip = new FZip (); zip.addEventListener (Event.OPEN, onOpen); zip.addEventListener (Event.COMPLETE, onComplete); zip.load (ny URLRequest ("wootheme.zip")); // endre dette for å matche zip-filens URL imageTileList.visible = false; 

Her oppretter vi en ny forekomst av FZip-klassen, legger til to hendelselyttere, og laster inn zip-filen. Sist satt vi imageTileList å være usynlig (Vi vil ikke at den skal vises før alle bildene fra zip har lastet).


Trinn 8: onOpen ()

Legg til følgende nye funksjon under setupFzip () funksjonen du skrev inn ovenfor:

 privat funksjon onOpen (evt: Event): void addEventListener (Event.ENTER_FRAME, onEnterFrame); 

Denne funksjonen kalles når zip-arkivet er åpnet. Her legger vi til en ENTER_FRAME hendelse lytter.

Trinn 9: onComplete ()

Legg til følgende kode ny funksjon under VedÅpning () funksjonen du skrev inn i trinnet ovenfor.

 privat funksjon onComplete (evt: Event): void done = true; 

Denne funksjonen kalles når det ikke er flere filer å behandle fra zip-arkivet.


Trinn 10: onEnterFrame ()

Legg til følgende under onComplete () funksjonen du skrev inn ovenfor. Denne funksjonen blir utløst hver ramme etter at zip-filen er åpnet:

 privat funksjon onEnterFrame (evt: Event): void // Bare legg inn 32 filer per ramme, for å lagre prosessorkraft for (var i: uint = 0; i < 32; i++)  // any new files available? if(zip.getFileCount() > numFiles) // ja så få det var fil: FZipFile = zip.getFileAt (numFiles); // er dette en png i ikonmappen? hvis (file.filename.indexOf ("woofunction-icons") == 0 && file.filename.indexOf (".png")! = -1) var loader: Loader = new Loader (); loader.loadBytes (file.content); tileListDp.addItem (kilde: loader); numFilesLoaded ++;  numFiles ++;  ellers // ingen nye filer tilgjengelig // sjekk om vi er ferdige hvis (ferdig) removeEventListener (Event.ENTER_FRAME, onEnterFrame); removeChild (imagesLoaded); imageTileList.visible = true; imageTileList.dataProvider = tileListDp;  // Avslutt Loop break  imagesLoaded.text = numFilesLoaded + "Bilder lastet"; 

Her er kjøttet av koden.

Siden dette kjører hver ramme, plasserer vi en kunstig begrensning på antall filer i arkivet som vi håndterer med en gang. Det er formålet med forløpet.

zip.getFileCount () avslører hvor mange filer som er i zip; numFiles lagrer hvor mange filer vi har behandlet så langt. Så, linje 5 sjekker om det fortsatt er flere filer å håndtere.

Hvis det ikke er noen filer igjen, hopper vi over til linje 17 og gjør bare noen grunnleggende opprydding: fjern ENTER_FRAME lytter, fjern tekstfeltet "Lasting", gjør fliselisten synlig, og koble den til dataene.

Hvis det er filer igjen, får vi den neste i listen vår ved hjelp av numFiles som en indeks. Vi sjekker deretter om det er en PNG fra ikonmappen; siden vi kjenner strukturen til zip-en på forhånd, kan vi jukse og bare sjekke om filens navn og sti inneholder "woofunction-icons" og ".png".

For å få bildet fra zip og inn i et DisplayObject, kan vi bruke en Loader. Denne klassen brukes ofte til å laste et bilde fra en URL, men her bruker vi sin loadBytes () -metode for å få dataene fra ByteArray laget av FZip.

Siden loader strekker Displayobject, Vi kan bare legge den direkte til TileList's DataProvider. Så øker vi begge deler numFilesLoaded og numFiles.

Hvorfor har vi to heltall for å holde oversikt over hvor mange filer som er lastet? Vi vil, numFiles fortsetter med å telle alle filene vi har undersøkt fra zip, mens numFilesLoaded fortsetter å telle spesifikt om bilde filer som vi har lastet inn i DataProvider. Det er sistnevnte variabel som vi bruker til å oppdatere "lasting" -teksten ved slutten av funksjonen.


Konklusjon

FZIP er et utrolig lite verktøy for å spare litt lastingstid og båndbredde. Jeg håper du har funnet denne opplæringen nyttig, og takk for å lese!