Hvordan bruke en ekstern Biblioteket i din Flash Projects

How å bruke en ekstern Biblioteket i flash Prosjekter
to
Del
en
Del

Dette Cyber ​​mandag Envato Tuts + kurs vil bli redusert til bare $ 3. Ikke gå glipp av.
Dette innlegget er en del av en serie som heter GreenSock Tweening Platform.

Så du har lest om en kjempeflott Flash bibliotek, motor, eller API, og du ønsker å bruke det i din egen prosjekt. Du laster ned det ... men det er enten noen rare fil du ikke vet hvordan du skal bruke (en SWC), eller en million mapper av AS-filer - noe som sier "dobbeltklikk for å installere meg". Hva pokker?


Et bibliotek er bare en samling av Action klasser som er blitt utformet slik at de ikke er bundet til ett prosjekt, og kan brukes i noe du bygger . Disse class filer kan være pakket inn i en enkelt SWC-fil, som er som en glidelås.

Jeg skal bruke Keith Peters fremragende MinimalComps som et eksempel, fordi det er tilgjengelig i både SWC og mappeformat. Det samme gjelder for alle AS3 biblioteker, APIer, og motorer, skjønt; noen andre gode eksempler er Box2DFlash og Greensock Tweening Platform

La oss starte med å se på hva du skal gjøre hvis du åpner zip og blir konfrontert med den rå klassefilene.



A Millioner Mapper av AS filer

Hver AS-fil, som du vet, inneholder en klasse (OK, muligens inneholder den flere klasser, eller et grensesnitt, men jobber med meg her). Du må være i stand til å få tilgang til disse klassene fra prosjektet, men du må også klassene for å kunne få tilgang til hverandre, så mange av dem vil nesten helt sikkert arve fra eller være sammensatt av andre klasser i biblioteket. Dette betyr at du kan ikke bare ta noen av klassene, pakke dem ut til prosjektmappen, og forventer at de skal fungere.

Åpne en av filene, og ta en titt på pakken erklæringen. For eksempel i minimalcomps zip, i fila /src/com/bit101/components/Accordion.as, er pakken erklæring:
pakke com.bit101.components

Se hvordan dette samsvarer med mappestrukturen? /src/com/bit101/components/Accordion.as. (Og klassen i filen heter Accordion.)

Det er ikke bare Keith Peters være pent og ryddig. Når du skriver en linje som:
import com.bit101.components.Accordion;

... Flash ser etter en fil som heter Accordion.as i mappestrukturen /com /bit101 /komponenter /. Pakken må matche mappestrukturen, slik at Flash kan finne filen; Hvis du flyttet Accordion.as til en annen mappe, som /com /bit101 /diagrammer /, og prøvde å gjøre:
import com.bit101.charts.Accordion;

... du vil få en feilmelding:
5001: Navnet på pakken 'com.bit101.components' reflekterer ikke plasseringen av denne filen. Vennligst endre pakken definisjonen navn inne i denne filen, eller flytte filen.

fornuft. Så, forteller pakken av klassen du hvilken mappe er rotmappen av biblioteket; det er det første ordet før det første punktumet i pakkenavnet - com i dette tilfellet. Dette betyr at du bør flytte /com /mappe og alle dens undermapper, til hovedkoden katalog av prosjektet.



Hva er den viktigste koden Directory?

Tips: Du vil ofte finne at rotmappen for biblioteket kalles /no /eller /net /eller /org /, fordi det er en felles konvensjon for å bruke ditt domenenavn (i revers) som pakken struktur. For eksempel er vi http://active.tutsplus.com så hvis vi sluppet et bibliotek, vil pakken starte com.tutsplus.active. Hvis alle holder seg til sine egne domenenavn, så er det ingen grunn til bekymring om noen uhell skape et bibliotek med samme pakkenavn som noen andre bibliotek. Men dette er ikke en universell konvensjon; verken Box2D eller de Greensock bibliotekene bruke den.

Hovedkodekatalogen er begrepet jeg bruker å referere til mappen hvor Flash ser for AS-filer (og mapper som inneholder AS filer).

Hvis du bruker Flash Professional, da, som standard, dette vil være avhengig av hva mappen din FLA er i Du kan endre dette, men.; se Daniel Apt Quick Tip, Hvordan organisere Flash prosjektfiler, for mer info

Hvis du bruker en annen Flash redaktør deretter mappen kan kalles noe -., men det vil sannsynligvis være en mappe som heter /src /eller /kilde /eller /kode /eller noe lignende, slik at du kan finne det ut. (Hvis alt annet mislykkes, bare lage en ny AS fil og se på hva standard lagringssted er.)

Prøv det - nedlastings MinimalComps, pakke ut zip, og kopiere den riktige mappen til prosjektets hoved kodekatalogen. Deretter import com.bit101.components.Accordion; og opprette en ny Accordion () et sted i prosjektet. Hvis du ikke ser en feilmelding, så du gjorde det riktig!



Global Classpaths

Hva om du fant et bibliotek så nyttig at du ønsket å være tilgjengelig for alle prosjektene som standard, uten å måtte kopiere og lime inn i rotkatalogen til hver ny prosjektets hovedkodekatalogen?

For dette, kan du bruke globale classpaths
. Hvis du angir en mappe på harddisken som en global klassebane, forteller du Flash for å alltid se etter klasser der, samt
i prosjektets hovedkodekatalogen.

La oss anta du oppretter en katalog C: \\ FlashLibraries \\ (Mac-brukere: tror Macintosh HD /FlashLibraries stedet), med en underkatalog MinimalComps, og kopiere /com /mappe fra MinimalComps zip til denne MinimalComps katalogen. Ville trekkspill klassen filen være på C: \\ FlashLibraries \\ MinimalComps \\ com \\ bit101 \\ komponenter \\ Accordion.as. Du kan da sette C: \\ FlashLibraries \\ MinimalComps \\ som en global klassebanen, og fra da av, ville hver Flash prosjekt du åpnet kunne kjøre:
import com.bit101.components.Accordion;

... uten problemer. Og siden Flash kun kompilerer klasser som faktisk brukes i prosjektet, vil det ikke pad ut SWF med bibliotekene i ditt globale klassebanen som du ikke
bruk.

Du kan selv trekke ut alle root kode klasser av alle bibliotekene til samme globale klassebanen - det vil si, kan du sette C: \\ FlashLibraries \\ som en global klassebanen, og deretter kopiere /com /mappe fra MinimalComps til denne mappen, så trekkspill klassen ville være på C: \\ FlashLibraries \\ com \\ bit101 \\ komponenter \\ Accordion.as. (Dette er sannsynligvis ikke verdt innsatsen, men, hvis du lastet ned vår imaginære Activetuts + bibliotek, det ville sitte i C: \\ FlashLibraries \\ com \\ tutsplus \\ aktiv \\, noe som betyr at den /com /mappe vil inneholde både en /bit101 /mappe og /tutsplus /mappe. Det er ikke et problem, men det blir rotete, og kan gjøre det svært vanskelig å slette en enkelt bibliotek senere.)


Hvordan sette en global CLASSPATH

I Flash CS3, klikk Rediger | Preferanser
, klikk på kategorien Action
, og velg Actionscript 3.0 Innstillinger
. Du vil se en liste over mapper. Klikk på plusstegnet for å legge en ny; du kan skrive plasseringen i, eller trykk målet å bla deg frem til det.

I senere versjoner av Flash Professional, det er litt mer til det. Klikk Rediger | Preferanser
, velg deretter kategorien Action Hotell og klikk på Actionscript 3.0 Innstillinger
som før. Påmeldingsskjema er litt annerledes:

Denne gangen bruker du Source path
delen for å sette de globale classpaths. Bruk plusstegnet for å legge til en ny oppføring, og mappeikonet for å bla deg frem til mappen.

Hvis du bruker en annen utviklingsmiljø, de globale CLASSPATH innstillingene vil være et annet sted. For eksempel, i FlashDevelop, velger du Prosjekt | Egenskaper
, deretter Classpaths
fanen, og klikk Rediger Global Classpaths ...
.



Prosjekt eller dokumentnivå Classpaths
< p> Hva gjør du hvis utvikleren av bibliotek utgivelser en ny versjon? Du kan laste den ned til en global klassebane, overskrive den forrige versjonen, og begynne å bruke den i nyeste prosjekt. Men så hvis du åpner en av dine eldre prosjekter - en som brukte den forrige versjonen av biblioteket -. Du vil kjøre inn i alle slags kompatibilitetsproblemer

Du kan løse dette ved å ha en mappe for hver versjon av bibliotek: C: \\ FlashLibraries \\ MinimalComps \\ v1 \\, C: \\ FlashLibraries \\ MinimalComps \\ v2 \\, C: \\ FlashLibraries \\ MinimalComps \\ v2.5 \\, C: \\ FlashLibraries \\ MinimalComps \\ v3 \\, ... og så videre. Deretter, når du har åpnet et prosjekt, ville du oppretter en ny global klassebane som mappen for å versjonen av biblioteket at prosjektet trenger, og slette alle de andre.

Det fungerer, men det er en fryktelig arbeidsflyt. I stedet kan du sette en klassebanen som er spesifikk for ett prosjekt.


Hvordan sette et prosjekt eller dokumentnivå CLASSPATH

I Flash Professional CS3 og over, når du har åpnet en FLA, klikk Fil | Publish Settings
, deretter velger du kategorien Flash
, og klikk Innstillinger
ved siden av Actionscript 3.0
. I Flash CS3, ser dialogboksen som dette:

På samme måte som når du setter en global klassebanen, kan du bruke plussknappen for å legge til en ny oppføring, og Target ikonet for å bla i en mappe. I senere versjoner av Flash, har dialogen mer til det:

Ikke bry deg om de andre kategoriene; bare bruke Source path
fane for å legge inn ønsket klassebanen.

Igjen, ulike utviklingsmiljøer vil lagre disse innstillingene på forskjellige steder. For å legge til et prosjekt classpath i FlashDevelop, velger du Prosjekt | Egenskaper
, deretter Classpaths
fanen, og klikk Legg CLASSPATH ...
.


relative baner

Tenk deg ' re bygge et Flash spill som har litt forskjellige versjoner for forskjellige spillportaler og et eget nivå editor. Mappestrukturen kan se ut this:
C:\\MyAwesomeGame\\game_core\\C:\\MyAwesomeGame\\game_kongregate\\C:\\MyAwesomeGame\\game_newgrounds\\C:\\MyAwesomeGame\\levelEditor\\

Now anta at du ønsker å bruke MinimalComps i alle versjoner av spillet, og Selge på ditt nivå editor - ikke bare noen gamle versjonen av MinimalComps, men spesielt den nyeste versjonen, i hvert prosjekt. I mellomtiden har du et annet prosjekt som er skrevet med en gammel versjon av MinimalComps, så trenger du ikke ønsker å bruke en global classpathen

Du kan opprette en ny mappe inni basen spillmappen.
C : \\ MyAwesomeGame \\ biblioteker \\

... og deretter kopiere rotmappen biblioteket direkte til det, så trekkspill klassen ville være på C:. \\ MyAwesomeGame \\ biblioteker \\ com \\ bit101 \\ komponenter \\ Accordion.as

Nå, vet du at du kan sette et prosjekt eller dokumentnivå klassebane i hver av de forskjellige spillversjoner, og nivået editor, å peke på C: \\ MyAwesomeGame \\ biblioteker \\, men hva hvis du trenger å dele alle de spillfiler med noen andre - kanskje et helt team? De vil enten nødt til å sørge for at deres mappestrukturen matcher din nøyaktig, eller gå gjennom hvert av prosjektene og endre classpaths å matche sin datamaskin, hver gang de får den nyeste versjonen. Hva vondt!

I stedet kan du bruke en relative klassebane
. Forutsatt at hovedkoden katalogen på level editor er /levelEditor /, så hvis du setter en klassebane av ../libraries/det vil se ut i riktig mappe. Hvorfor? Fordi ../betyr "katalogen over den nåværende".

Dette betyr at du kan bruke ../libraries/for alle versjoner av spillet, og de vil alle peker til den samme katalogen. Og så, når du deler koden med dine lagkamerater, kan du gi dem hele /MyAwesomeGame /mappe og den vil inneholde alt
de trenger. Det er mindre for deg å huske å gjøre - ikke nødvendig å endre classpaths eller kopiere hver ny versjon av biblioteket til de ulike mappene - og så er det mye mindre sjanse for å gjøre en enkel feil. Stor

(Du kan ta dette enda lenger og sette all koden som de ulike versjonene av spillet aksje i mappen C: \\ MyAwesomeGame \\ felles \\ ... men det er å komme bort fra emnet i denne artikkelen)

Du kan hekker den spesielle ../katalogen, også! ../../går opp to kataloger stedet for bare én, og så videre. Du kan også bruke ./å referere til "gjeldende katalog".



SWC-filer

Som jeg sa, er en SWC-fil i utgangspunktet en zip-fil som inneholder Action klasser og andre slike data. For eksempel, i min FlashDevelop guide jeg forklarte hvordan du eksporterer bibliotek eiendeler, opprettet i Flash Professional, som en SWC, slik at de kunne brukes i en annen arbeidsflyt. Det er mulig å gjøre det samme med rent kodebaserte klasser

Jeg vil ikke forklare hvordan du oppretter en slik SWC her, men jeg skal forklare de to viktigste fordelene for utviklere av bibliotekene.
< ol>
Hele biblioteket (inkludert grafiske midler) kan finnes i en enkelt fil.

Innholdet i de enkelte klassene (dvs. de som filer) kan ikke vises eller endres.

Du har fortsatt valget mellom å bruke den SWC biblioteket i et enkelt prosjekt, i alle dine prosjekter, eller delt mellom noen av dem, selv om midlene for å inkludere dem i prosjektene dine er litt annerledes enn når du har den faktiske class filer



Bruke SWC biblioteker i prosjektene

Flash Professional CS3 har noen store begrensninger når det gjelder å bruke SWC biblioteker. det kan ikke bruke SWCs som bare er en samling klassefiler. Hvis SWC inneholder komponenter
, kan du flytte den til /komponenter /katalog på harddisken din, og deretter (innen Flash) dra den fra Components panelet til biblioteket eller scenen. Denne katalogen er på C: \\ Program Files \\ Adobe \\ Adobe Flash CS3 \\ {language}
\\ Configuration \\ Components \\ som standard i Windows og Macintosh HD /Programmer /Adobe Flash CS3 /Konfigurasjon /Components som standard på Mac OS X.

Du kan kopiere SWC komponenter til de tilsvarende mappene i Flash Professional CS4 + hvis du vil ha tilgang til dem gjennom Components panelet. . For SWCs som består av kode klasser kan du også bruke dem som en global klassebane eller en klassebane dokument eller prosjektnivå

For å sette en global klassebane, klikk Rediger | Preferanser
, velg deretter kategorien Action Hotell og klikk på Actionscript 3.0 Innstillinger
som før. Du vil se denne dialogboksen:

Legg plasseringene til dine SWCs til Bibliotek banen
. Som dialogen antyder, kan du sette flere SWCs i samme mappe og bare peke på den mappen.

( Ekstern biblioteket banen
boksen kan brukes til å angi SWC biblioteker som skal lastes under kjøring, heller enn når komponenten er kompilert. Hvis du har fått enorme mengder med kode og eiendeler deles mellom prosjektene dine, kan du redusere lastetiden for brukerne ved å sette alle delte ressurser på en SWC-fil og bruke den som en ekstern bibliotek;. Brukerne vil da bare å laste det ned en gang og vil da kunne bruke det i hver av dine andre prosjekter Dette er sannsynligvis ikke hva du vil gjøre med biblioteker du har lastet ned, skjønt)
!

Hvis du vil angi et dokument-nivå SWC i Flash Pro CS4 og over, når du har åpnet en FLA, klikk Fil | Publish Settings
, deretter velger du kategorien Flash
, og klikk Innstillinger
ved siden av Actionscript 3.0
. Bytt til Bibliotek banen
kategorien. Dialogen ser slik ut:

Du kan bruke relative baner her, akkurat som når du har fått de enkelte klassefilene

Ulike utviklingsmiljøer vil ha ulike måter å importere SWCs.. For info om hvordan du bruker SWCs i FlashDevelop, se min guide.

Jeg håper det hjelper! Nå, når en tutorial sier "last ned dette biblioteket", bør du vite nøyaktig hva du skal gjøre :) La meg vite om noe er uklart, og jeg vil avklare det for deg.