Så du har lest om et fantastisk Flash-bibliotek, en motor eller en API, og du vil bruke den i ditt eget prosjekt. Du laster ned den? men det er heller noen merkelig fil du ikke vet hvordan du skal bruke (en SWC) eller en million mapper av AS-filer - ingenting som sier "dobbeltklikk for å installere meg". Hva pokker?
Et bibliotek er bare en samling ActionScript-klasser som er utformet slik at de ikke er knyttet til et prosjekt, og kan brukes i alt du bygger. Disse klassefilene kan legges sammen i en enkelt SWC-fil, som er som en zip.
Jeg vil bruke Keith Peters utmerkede MinimalComps som et eksempel, fordi det er tilgjengelig i både SWC og mappeformat. Det samme gjelder 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 konfronteres med de røde klassefilene:
Hver AS-fil, som du vet, inneholder en klasse (okay, det inneholder muligens flere klasser, eller et grensesnitt, men jobber med meg her). Du må kunne få tilgang til disse klassene fra prosjektet ditt, men du trenger også klassene for å kunne få tilgang til hverandre, da mange av dem nesten vil arve fra eller være sammensatt av andre klasser i biblioteket. Dette betyr at du ikke bare kan gripe noen av klassene, trekke dem ut i prosjektmappen din, og forvent at de skal fungere.
Åpne en av filene, og ta en titt på pakke
erklæring. For eksempel, i minimalcomps zip, i filen /src/com/bit101/components/Accordion.as
, pakkeangivelsen er:
pakke com.bit101.components
Se hvordan dette tilsvarer mappestrukturen? / Src /com / bit101 / komponenter/Accordion.as
. (Og klassen i filen heter Trekkspill
.)
Det er ikke bare Keith Peters som er pent og ryddig. Når du skriver inn en linje som:
importer com.bit101.components.Accordion;
? Flash ser etter en fil som heter Accordion.as
i mappestrukturen / no / bit101 / komponenter /
. Pakken må samsvare med mappestrukturen, slik at Flash kan finne filen; hvis du flyttet Accordion.as
til en annen mappe, som / no / bit101 / diagrammer /
, og prøvde å gjøre:
importer com.bit101.charts.Accordion;
? du får en feilmelding:
5001: Navnet på pakken 'com.bit101.components' gjenspeiler ikke plasseringen til denne filen. Vennligst endre pakningsdefinisjonens navn i denne filen, eller flytt filen.
Gir mening. Så forteller pakken i klassen hvilken mappe som er bibliotekets rotmappe. Det er det første ordet før den første prikken i pakkenavnet -- com
i dette tilfellet. Dette betyr at du skal flytte / No /
mappe og alle undermapper, til hovedkatalogen av prosjektet.
Tips: Du finner ofte at rotmappen til biblioteket heter / No /
eller /nett/
eller / Org /
, fordi det er en vanlig konvensjon å bruke domenenavnet ditt (i omvendt) som pakkestruktur. For eksempel er vi http://active.tutsplus.com
så hvis vi slipper ut et bibliotek, vil pakken starte com.tutsplus.active
. Hvis alle stikker til sine egne domenenavn, er det ingen grunn til bekymring for noen som ved et uhell lager et bibliotek med de samme pakkenavnene som andres bibliotek. Dette er imidlertid ikke en universell konvensjon; verken Box2D eller Greensock-bibliotekene bruker den.
Hovedkatalogen er termen jeg bruker til å referere til mappen der Flash ser etter dine AS-filer (og mapper som inneholder AS-filer).
Hvis du bruker Flash Professional, vil det som standard være denne mappen din FLA er. Du kan imidlertid endre dette. se Daniel Apt's Quick Tip, Slik organiserer du Flash-prosjektfilene
, for mer info.
Hvis du bruker en annen Flash-editor, kan mappen bli kalt noe - men det vil nok være en mappe som heter / Src /
eller /kilde/
eller /kode/
eller noe lignende, slik at du kan finne ut det. (Hvis alt annet mislykkes, må du bare opprette en ny AS-fil og se på hvilken standard lagringsplass er.)
Prøv det ut - last ned MinimalComps, hent zip og kopier riktig mappe til prosjektets hovedkatalogkatalog. Deretter, importer com.bit101.components.Accordion;
og opprett en ny Accordion ()
et sted i prosjektet ditt. Hvis du ikke ser en feilmelding, så gjorde du det riktig!
Hva om du fant et bibliotek så nyttig at du ville at det skulle være tilgjengelig for alle dine prosjekter som standard uten å måtte kopiere og lime inn rotmappen til hvert nytt prosjekts hovedkatalogkatalog?
For dette kan du bruke globale klassepaner. Hvis du angir en mappe på harddisken din som en global klassepath, forteller du Flash for alltid å se etter klasser der, i tillegg til i prosjektets hovedkatalogkatalog.
La oss anta at du oppretter en katalog C: \ FlashLibraries \
(Mac-brukere: tenk Macintosh HD / FlashLibraries
i stedet), med en underkatalog MinimalComps
, og kopier / No /
mappe fra MinimalComps zip til dette MinimalComps
katalogen. Accordion klassen fil vil være på C: \ FlashLibraries \ MinimalComps \ com \ bit101 \ komponenter \ Accordion.as
. Du kan da sette C: \ FlashLibraries \ MinimalComps \
som en global klassepath, og fra da av vil hvert Flash-prosjekt du åpnet kunne kjøre:
importer com.bit101.components.Accordion;
? uten problemer. Og siden Flash bare samler klasser som faktisk brukes i prosjektet ditt, vil det ikke kaste ut SWF-en med bibliotekene i din globale klassepath som du ikke bruk.
Du kan til og med trekke ut alle rotkodeklassene i alle bibliotekene dine til samme globale klassepath - det vil si at du kan sette C: \ FlashLibraries \
som en global klassepath, og kopier deretter / No /
mappe fra MinimalComps til denne mappen, så Accordion-klassen ville være på C: \ FlashLibraries \ com \ bit101 \ komponenter \ Accordion.as
. (Dette er nok ikke verdt innsatsen, men hvis du lastet ned vårt imaginære Activetuts + -bibliotek, ville det sitte i C: \ FlashLibraries \ com \ tutsplus \ aktiv \
, noe som betyr at / No /
mappen vil inneholde både a / Bit101 /
mappe og a / Tutsplus /
mappe. Det er ikke et problem, men det blir rotete, og kan gjøre det svært vanskelig å slette et enkelt bibliotek senere.)
I Flash CS3 klikker du Rediger | Preferanser, klikk deretter på Action kategori, og velg ActionScript 3.0-innstillinger. Du får se en liste over mapper. Klikk på pluss-tegnet for å legge til en ny; Du kan skrive inn plasseringen, eller trykke på målet for å bla til det.
I nyere versjoner av Flash Professional er det litt mer til det. Klikk Rediger | Preferanser, velg deretter Action kategori og klikk ActionScript 3.0-innstillinger som før. Oppføringsskjemaet er litt annerledes:
Denne gangen bruker du Kildebane seksjon for å angi de globale klassepatene. Bruk pluss-tegnet for å legge til en ny oppføring og mappeikonet for å bla til mappen.
Hvis du bruker et annet utviklingsmiljø, vil de globale klassepathinnstillingene være et annet sted. For eksempel, i FlashDevelop, velg Prosjekt | Eiendommer, og så Classpaths kategorien, og klikk Rediger Global Classpaths? .
Hva gjør du hvis utvikleren av biblioteket slipper ut en ny versjon? Du kan laste den ned til en global klassepath, overskrive den forrige versjonen, og begynne å bruke den i ditt nyeste prosjekt. Men så hvis du åpner en av dine eldre prosjekter - en som brukte den forrige versjonen av biblioteket - kommer du til å løse alle slags problemer med inkompatibilitet.
Du kan løse dette ved å ha en mappe for hver versjon av biblioteket: C: \ FlashLibraries \ MinimalComps \ v1 \
, C: \ FlashLibraries \ MinimalComps \ v2 \
, C: \ FlashLibraries \ MinimalComps \ v2.5 \
, C: \ FlashLibraries \ MinimalComps \ v3 \
,? og så videre. Deretter, når du åpnet et prosjekt, ville du opprette en ny global klassepath som mappen for til versjonen av biblioteket som prosjektet ditt trenger, og slette alle de andre.
Det fungerer, men det er en fryktelig arbeidsflyt. I stedet kan du sette en klassepath som er spesifikk for ett prosjekt.
I Flash Professional CS3 og over, når du har åpnet en FLA, klikker du Fil | Publiser innstillinger, velg deretter Blits kategorien, og klikk innstillinger ved siden av ActionScript 3.0. I Flash CS3 ser dialogboksen ut slik:
Akkurat som når du setter en global klassepath, kan du bruke Plus-knappen til å legge til en ny oppføring, og Mål-ikonet for å bla til en mappe. I nyere versjoner av Flash har dialogboksen mer til det:
Ikke bekymre deg for de andre fanene; bare bruk Kildebane kategorien for å legge til ønsket klassepath.
Igjen vil forskjellige utviklingsmiljøer lagre disse innstillingene på forskjellige steder. Hvis du vil legge til et prosjektklasse i FlashDevelop, velger du Prosjekt | Eiendommer, og så Classpaths kategorien, og klikk Legg til klassebane? .
Tenk deg at du bygger et Flash-spill som har litt forskjellige versjoner for forskjellige spillportaler og en separat nivåredigerer. Mappestrukturen din kan se slik ut:
C: \ MyAwesomeGame \ game_core \ C: \ MyAwesomeGame \ game_kongregate \ C: \ MyAwesomeGame \ game_newgrounds \ C: \ MyAwesomeGame \ levelEditor \
Anta nå at du vil bruke MinimalComps i alle versjoner av spillet ditt, og i din nivåredigerer - ikke bare noen gammel versjon 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, slik at du ikke vil bruke en global klassepath.
Du kan opprette en ny mappe inne i din base spillmappe:
C: \ MyAwesomeGame \ biblioteker \
? og kopier deretter roten mappen til biblioteket direkte til den, så Accordion-klassen vil være på C: \ MyAwesomeGame \ biblioteker \ com \ bit101 \ komponenter \ Accordion.as
.
Nå vet du at du kan angi et klasseprosjekt for prosjekt eller dokumentnivå i hver av de forskjellige spillversjonene, og nivåredigeren, for å peke på C: \ MyAwesomeGame \ biblioteker \
, men hva om du trenger å dele alle spillfilene med noen andre - kanskje et helt lag? De må enten sørge for at deres mappestruktur stemmer overens med deg, eller gå gjennom hvert av prosjektene og endre klassestiene for å matche datamaskinen, hver gang de får den nyeste versjonen. Hva en smerte!
I stedet kan du bruke en relativ klassepath. Forutsatt at hovedkatalogen av nivåredigeren er / LevelEditor /
, så hvis du setter en klassebane av ? / bibliotek /
det vil se i riktig mappe. Hvorfor? Fordi ? /
betyr "katalogen over den nåværende".
Dette betyr at du kan bruke ? / bibliotek /
for alle versjoner av spillet ditt, og de vil alle peke til samme katalog. Og da, når du deler koden med lagkamrene dine, kan du gi dem hele / MyAwesomeGame /
mappe og den vil inneholde alt de trenger. Det er mindre for deg å huske å gjøre - det er ikke nødvendig å endre klassestiene eller kopiere hver ny versjon av biblioteket til de forskjellige mappene - og så er det mye mindre sjanse for å gjøre en enkel feil. Flott!
(Du kan ta dette enda lenger og sette all koden som de forskjellige forskjellige versjoner av spillet deler i mappen C: \ MyAwesomeGame \ felles \
? men det kommer seg bort fra emnet i denne artikkelen!)
Du kan nest den spesielle ? /
katalog, også: ? /? /
går opp to kataloger i stedet for bare en, og så videre. Du kan også bruke ./
å referere til "gjeldende katalog".
Som jeg sa, er en SWC-fil i utgangspunktet en zip-fil som inneholder ActionScript-klasser og andre slike data. For eksempel, i min FlashDevelop-veiledning forklarte jeg hvordan du eksporterer biblioteksaktiver, 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 lager en slik SWC her, men jeg vil forklare de to største fordelene for utviklere av biblioteker:
Du har fortsatt muligheten til å bruke SWC-biblioteket i et enkelt prosjekt, i alle prosjektene dine, eller deles mellom noen av dem, selv om midler for å inkludere dem i prosjektene dine, er litt annerledes enn når du har de faktiske klassefilene.
Flash Professional CS3 har noen store begrensninger når det gjelder bruk av SWC-biblioteker: det kan ikke bruke SWCer som bare er en samling klassefiler. Hvis SWC inneholder komponenter, du kan flytte den til din / Komponenter /
katalog på harddisken din, og deretter (i Flash) dra den fra komponentpanelet til biblioteket eller scenen. Denne katalogen er på C: \ Programmer \ Adobe \ Adobe Flash CS3 \Språk\ Configuration \ Components \
som standard i Windows, og Macintosh HD / Programmer / Adobe Flash CS3 / Konfigurasjon / Komponenter
som standard på Mac OS X.
Du kan kopiere SWC-komponenter til tilsvarende mapper i Flash Professional CS4 + hvis du vil ha tilgang til dem via komponentpanelet. For SWCer som består av kodeklasser, kan du også sette dem som en global klassepath eller et dokument eller prosjektnivå klassepath.
For å angi en global klassepath, klikk Rediger | Preferanser, velg deretter Action kategori og klikk ActionScript 3.0-innstillinger som før. Du ser denne dialogboksen:
Legg til plasseringene til SWCene dine til Bibliotekspass. Som dialogboksen foreslår, kan du sette flere SWCer i samme mappe og bare peke på den mappen.
(De Ekstern bibliotekssti boksen kan brukes til å spesifisere SWC-biblioteker som skal lastes ved kjøretid, i stedet for når komponenten er kompilert. Hvis du har store mengder kode og eiendeler delt mellom prosjektene, kan du redusere lastetiden for brukerne ved å sette alle delte ressurser i en SWC-fil og bruke den som et eksternt bibliotek. Brukerne må da bare laste den ned en gang og vil da kunne bruke den i alle dine andre prosjekter. Dette er sannsynligvis ikke det du vil gjøre med biblioteker du har lastet ned, skjønt!)
Hvis du vil angi et SWC på dokumentnivå i Flash Pro CS4 og nyere, når du har åpnet en FLA, klikker du Fil | Publiser innstillinger, velg deretter Blits kategorien, og klikk innstillinger ved siden av ActionScript 3.0. Bytt til Bibliotekspass fane. Dialogen ser slik ut:
Du kan bruke relative baner her, akkurat som når du har de enkelte klassefilene.
Ulike utviklingsmiljøer har forskjellige måter å importere SWC på. For informasjon om bruk av SWCer i FlashDevelop, se min guide.
Jeg håper det hjelper! Nå, når en opplæring sier, "last ned dette biblioteket", bør du vite nøyaktig hva du skal gjøre :) Gi meg beskjed hvis noe er uklart, og jeg vil klargjøre det for deg.