Så du har läst om ett fantastiskt Flash-bibliotek, en motor eller ett API, och du vill använda det i ditt eget projekt. Du laddar ner det? men det är antingen någon konstig fil som du inte vet hur man använder (en SWC) eller en miljon mappar av AS-filer - ingenting som säger "dubbelklicka för att installera mig". Vad i helvete?
Ett bibliotek är bara en samling ActionScript-klasser som är utformade så att de inte är knutna till något projekt och kan användas i allt du bygger. Dessa klassfiler kan kombineras i en enda SWC-fil, som är som en zip.
Jag använder Keith Peters utmärkta MinimalComps som ett exempel, eftersom det är tillgängligt i både SWC och mappformat. Detsamma gäller för alla AS3-bibliotek, API och motorer. några andra bra exempel är Box2DFlash och Greensock Tweening Platform.
Låt oss börja med att titta på vad du ska göra om du öppnar zip och konfronteras med de råa klassfilerna:
Varje AS-fil innehåller, som du vet, en klass (okej, det innehåller eventuellt flera klasser, eller ett gränssnitt, men fungerar med mig här). Du måste kunna komma åt dessa klasser från ditt projekt, men du behöver också klasserna för att kunna komma åt varandra, eftersom många av dem nästan säkert kommer att arva från eller vara sammansatta av andra klasser i biblioteket. Det betyder att du inte bara kan ta några av klasserna, extrahera dem till din projektmapp och förvänta dig att de ska fungera.
Öppna en av filerna och ta en titt på paket
deklaration. Till exempel i minimalcomps zip, i filen /src/com/bit101/components/Accordion.as
, Förpackningsdeklarationen är:
paket com.bit101.components
Se hur det här motsvarar mappstrukturen? / Src /com / bit101 / komponenter/Accordion.as
. (Och klassen i filen heter Dragspel
.)
Det är inte bara Keith Peters som är snyggt och snyggt. När du skriver en rad som:
importera com.bit101.components.Accordion;
? Flash letar efter en fil som heter Accordion.as
i mappstrukturen / com / bit101 / komponenter /
. Paketet måste matcha mappstrukturen, så att Flash kan hitta filen; om du flyttat Accordion.as
till en annan mapp, som / com / bit101 / diagram /
, och försökte göra:
importera com.bit101.charts.Accordion;
? du får ett felmeddelande:
5001: Namnet på paketet 'com.bit101.components' återspeglar inte platsen för den här filen. Ändra paketdefinitionens namn i den här filen, eller flytta filen.
Är vettigt. Så, i klassens paket berättar du vilken mapp bibliotekets rotmapp är; Det är det första ordet innan den första pricken i paketnamnet -- com
I detta fall. Det betyder att du borde flytta / Se /
mappen och alla dess undermappar, till huvudkatalogen för ditt projekt.
Tips: Du hittar ofta att rotmappen för biblioteket heter / Se /
eller /netto/
eller / Org /
, eftersom det är en vanlig konvention att använda ditt domännamn (i omvända) som paketstrukturen. Vi är till exempel http://active.tutsplus.com
så om vi släppte ett bibliotek skulle paketet börja com.tutsplus.active
. Om alla pinnar till sina egna domännamn är det ingen oro om någon som oavsiktligt skapar ett bibliotek med samma paketnamn som någon annans bibliotek. Detta är dock inte en universell konvention; varken Box2D eller Greensock-biblioteken använder det.
Huvudkodkatalogen är termen som jag använder för att referera till mappen där Flash letar efter dina AS-filer (och mappar som innehåller AS-filer).
Om du använder Flash Professional, kommer det som standard att vara vilken mapp din FLA är. Du kan dock ändra det här. se Daniel Apts snabba tips, Hur man organiserar dina Flash-projektfiler
, för mer information.
Om du använder en annan Flash-editor så kan mappen kallas någonting - men det kommer troligen att vara en mapp som heter / Src /
eller /källa/
eller /koda/
eller något liknande, så du kan räkna ut det. (Om allt annat misslyckas, skapa bara en ny AS-fil och titta på vad standardlagringsplatsen är.)
Prova det - ladda ner MinimalComps, ta ut zip och kopiera rätt mapp till ditt projekts huvudkatalogkatalog. Sedan, importera com.bit101.components.Accordion;
och skapa en ny Accordion ()
någonstans i ditt projekt. Om du inte ser ett felmeddelande så gjorde du det rätt!
Vad händer om du hittade ett bibliotek så användbart att du ville ha tillgång till alla dina projekt som standard utan att behöva kopiera och klistra in rotmappen till varje nytt projekts huvudkatalogkatalog?
För detta kan du använda globala klassvägar. Om du anger en mapp på hårddisken som en global klassväg, berättar du Flash att alltid leta efter klasser där, såväl som i projektets huvudkatalogkatalog.
Låt oss anta att du skapar en katalog C: \ FlashLibraries \
(Mac-användare: tänk Macintosh HD / FlashLibraries
istället), med en underkatalog MinimalComps
, och kopiera / Se /
mapp från MinimalComps zip till detta MinimalComps
katalogen. Accordion-klassfilen skulle vara på C: \ FlashLibraries \ MinimalComps \ com \ bit101 \ komponenter \ Accordion.as
. Du kan då ställa in C: \ FlashLibraries \ MinimalComps \
som en global klassväg, och från och med då skulle varje Flash-projekt du öppnade kunna köra:
importera com.bit101.components.Accordion;
? utan problem. Och eftersom Flash bara sammanställer klasser som faktiskt används i ditt projekt, kommer det inte att kasta ut din SWF med biblioteken i din globala klassväg som du inte använda sig av.
Du kan till och med extrahera alla rootkodklasser av alla dina bibliotek till samma globala klassväg - det vill säga du kan ställa in C: \ FlashLibraries \
som en global klassväg, och sedan kopiera / Se /
mapp från MinimalComps till den här mappen, så Accordion-klassen skulle vara på C: \ FlashLibraries \ com \ bit101 \ komponenter \ Accordion.as
. (Det här är förmodligen inte värt ansträngningen, men om du laddat ner vårt imaginära Activetuts + -bibliotek skulle det sitta i C: \ FlashLibraries \ com \ tutsplus \ aktiv \
, vilket innebär att / Se /
mappen skulle innehålla både a / Bit101 /
mapp och a / Tutsplus /
mapp. Det är inte ett problem, men det blir rörigt och kan göra det väldigt svårt att ta bort ett enda bibliotek senare.)
I Flash CS3 klickar du på Redigera | Inställningar, klicka sedan på Action kategori och välj ActionScript 3.0-inställningar. Du får se en lista med mappar. Klicka på Plus-tecknet för att lägga till en ny; du kan skriva in platsen eller trycka på målet för att bläddra till det.
I senare versioner av Flash Professional finns det lite mer till det. Klick Redigera | Inställningar, välj sedan Action kategori och klicka ActionScript 3.0-inställningar som förut. Inmatningsformuläret är lite annorlunda:
Den här gången använder du Källväg avsnitt för att ställa in de globala klassvägarna. Använd Plus-tecknet för att lägga till en ny post och mappikonen för att bläddra till mappen.
Om du använder en annan utvecklingsmiljö kommer de globala klassvägsinställningarna att vara någon annanstans. Till exempel, i FlashDevelop, välj Projekt | Egenskaper, sedan Classpaths fliken och klicka på Redigera globala klassvägar? .
Vad gör du om bibliotekets utvecklare släpper ut en ny version? Du kan hämta den till en global klassväg, skriva över den tidigare versionen och börja använda den i ditt senaste projekt. Men då om du öppnar ett av dina äldre projekt - en som använde den tidigare versionen av biblioteket - kommer du att stöta på alla slags inkompatibilitetsproblem.
Du kan lösa detta genom att ha en mapp för varje version av biblioteket: C: \ FlashLibraries \ MinimalComps \ v1 \
, C: \ FlashLibraries \ MinimalComps \ v2 \
, C: \ FlashLibraries \ MinimalComps \ v2.5 \
, C: \ FlashLibraries \ MinimalComps \ v3 \
,? och så vidare. När du öppnade ett projekt så skapar du en ny global klassväg som mapp för den version av biblioteket som ditt projekt behöver och raderar alla andra.
Det fungerar, men det är ett hemskt arbetsflöde. I stället kan du ställa in en klassväg som är specifik för ett projekt.
I Flash Professional CS3 och senare, när du har öppnat en FLA klickar du på Fil | Publicera inställningar, välj sedan Blixt fliken och klicka på inställningar bredvid ActionScript 3.0. I Flash CS3 ser dialogrutan ut så här:
Precis som när du ställer in en global klassväg, kan du använda plusknappen för att lägga till en ny post och mål-ikonen för att bläddra till en mapp. I senare versioner av Flash har dialogrutan mer till det:
Oroa dig inte för de andra flikarna; använd bara Källväg fliken för att lägga till önskad klassväg.
Återigen kommer olika utvecklingsmiljöer att lagra dessa inställningar på olika ställen. Om du vill lägga till ett projekt klassväg i FlashDevelop väljer du Projekt | Egenskaper, sedan Classpaths fliken och klicka på Lägg till klassväg? .
Tänk dig att du bygger ett Flash-spel som har lite olika versioner för olika spelportaler och en separat nivåredigerare. Din mappstruktur kan se ut så här:
C: \ MyAwesomeGame \ game_core \ C: \ MyAwesomeGame \ game_kongregate \ C: \ MyAwesomeGame \ game_newgrounds \ C: \ MyAwesomeGame \ levelEditor \
Antag nu att du vill använda MinimalComps i alla versioner av ditt spel, och i din nivåredigerare - inte bara någon gammal version av MinimalComps, men speciellt den senaste versionen, i varje projekt. Under tiden har du ett annat projekt som är skrivet med en gammal version av MinimalComps, så du vill inte använda en global klassväg.
Du kan skapa en ny mapp i din basspelmapp:
C: \ MyAwesomeGame \ bibliotek \
? och sedan kopiera bibliotekets rotmapp direkt till den, så Accordion-klassen skulle vara på C: \ MyAwesomeGame \ bibliotek \ com \ bit101 \ komponenter \ Accordion.as
.
Nu vet du att du kan ställa in ett klassprojekt på projekt eller på dokumentsnivå i var och en av de olika spelversionerna och nivåredigeraren, för att peka på C: \ MyAwesomeGame \ bibliotek \
, men vad händer om du behöver dela alla spelfiler med någon annan - kanske ett helt lag? De måste antingen se till att deras mappstruktur matchar din exakt eller gå igenom alla projekt och ändra klassvägarna för att matcha datorn, varje gång de får den senaste versionen. Vilken smärta!
Istället kan du använda en relativ klassväg. Antag huvudkodskatalogen för nivåredigeraren / Baneditor /
, då om du ställer in en klassväg av ? / bibliotek /
det kommer att se i rätt mapp. Varför? Därför att ? /
betyder "katalogen ovanför den nuvarande".
Det betyder att du kan använda ? / bibliotek /
för alla versioner av ditt spel, och de pekar alla på samma katalog. Och då, när du delar koden med dina lagkamrater, kan du ge dem hela / MyAwesomeGame /
mapp och det kommer att innehålla allt de behöver. Det finns mindre för att du kommer ihåg att göra - ingen anledning att ändra klassvägarna eller kopiera varje ny version av biblioteket till olika olika mappar - och så är det mycket mindre chans att göra ett enkelt fel. Bra!
(Du kan ta detta ännu längre och sätta hela koden som de olika olika versionerna av spelet delar i mappen C: \ MyAwesomeGame \ delade \
? men det är borta från ämnet i den här artikeln!)
Du kan bo det speciella ? /
katalog också: ? /? /
går upp två kataloger istället för bara en och så vidare. Du kan också använda ./
att referera till "den aktuella katalogen".
Som jag sa är en SWC-fil i princip en zip-fil som innehåller ActionScript-klasser och andra sådana data. I till exempel i min FlashDevelop-guide förklarade jag hur du exporterar bibliotekstillgångar, skapade i Flash Professional, som en SWC så att de kunde användas i ett annat arbetsflöde. Det är möjligt att göra detsamma med rent kodbaserade klasser.
Jag kommer inte att förklara hur man skapar en sådan SWC här, men jag ska förklara de två största fördelarna med bibliotekets utvecklare:
Du har fortfarande valet att använda SWC-biblioteket i ett enda projekt, i alla dina projekt eller delas mellan några av dem, men medlen för att inkludera dem i dina projekt är lite annorlunda än när du har de faktiska klassfilerna.
Flash Professional CS3 har några större begränsningar när det gäller att använda SWC-bibliotek: det kan inte använda SWC-filer som bara är en samling klassfiler. Om SWC innehåller komponenter, du kan flytta den till din /Komponenter/
katalog på hårddisken, och sedan (inom Flash) dra den från komponentpanelen till ditt bibliotek eller scen. Den här katalogen är på C: \ Program \ Adobe \ Adobe Flash CS3 \språk\ Configuration \ Components \
som standard i Windows och Macintosh HD / Program / Adobe Flash CS3 / Konfiguration / Komponenter
som standard på Mac OS X.
Du kan kopiera SWC-komponenter till motsvarande mappar i Flash Professional CS4 + om du vill komma åt dem via komponentpanelen. För SWCs som består av kodklasser kan du också ställa in dem som en global klassväg eller ett dokument eller projektnivå klassväg.
För att ställa in en global klassväg, klicka på Redigera | Inställningar, välj sedan Action kategori och klicka ActionScript 3.0-inställningar som förut. Du får se den här dialogrutan:
Lägg till platserna för dina SWC: er till Bibliotekspass. Som dialogrutan föreslår kan du lägga flera SWC i samma mapp och peka bara på den mappen.
(De Extern biblioteksväg rutan kan användas för att specificera SWC-bibliotek som ska laddas i körtid snarare än när komponenten sammanställs. Om du har stora mängder kod och tillgångar som delas mellan dina projekt kan du minska belastningstiden för dina användare genom att lägga alla delade resurser i en SWC-fil och använda den som ett externt bibliotek. Användarna behöver då bara ladda ner den en gång och kan sedan använda den i alla dina andra projekt. Det här är nog inte vad du vill göra med bibliotek du har laddat ner, men!)
Om du vill ställa in en SWC på dokumentnivå i Flash Pro CS4 och senare, när du har öppnat en FLA klickar du på Fil | Publicera inställningar, välj sedan Blixt fliken och klicka på inställningar bredvid ActionScript 3.0. Byt till Bibliotekspass flik. Dialogrutan ser ut så här:
Du kan använda relativa sökvägar här, precis som när du har de enskilda klassfilerna.
Olika utvecklingsmiljöer har olika sätt att importera SWC. För information om hur du använder SWC i FlashDevelop, se min guide.
Jag hoppas att det hjälper! Nu när en handledning säger "ladda ner det här biblioteket", borde du veta exakt vad du ska göra :) Låt mig veta om någonting är oklart och jag kommer att klargöra det för dig.