Hoe een externe bibliotheek in uw Flash-projecten te gebruiken

Dus je hebt gelezen over een geweldige Flash-bibliotheek, -motor of -API, en je wilt het gebruiken in je eigen project. Je download het? maar het is een of ander vreemd bestand dat je niet weet te gebruiken (een SWC), of een miljoen mappen met AS-bestanden - niets dat zegt "dubbelklik om me te installeren". Wat maakt het uit?

Een bibliotheek is slechts een verzameling ActionScript-klassen die zo zijn ontworpen dat ze niet aan een bepaald project zijn gekoppeld en kunnen worden gebruikt in alles wat u aan het bouwen bent. Deze klassebestanden kunnen worden gebundeld in een enkel SWC-bestand, dat lijkt op een zip.

Ik zal de uitstekende MinimalComps van Keith Peters als voorbeeld gebruiken, omdat het beschikbaar is in zowel SWC- als mapindeling. Hetzelfde geldt echter voor alle AS3-bibliotheken, API's en engines; enkele andere geweldige voorbeelden zijn Box2DFlash en het Greensock Tweening Platform.

Laten we beginnen met kijken naar wat je moet doen als je de zip opent en geconfronteerd wordt met de onbewerkte klassebestanden:


Een miljoen mappen met AS-bestanden

Elk AS-bestand bevat, zoals u weet, een klasse (oke, het bevat mogelijk meerdere klassen of een interface, maar werkt hier met mij). Je moet in staat zijn om toegang te krijgen tot deze klassen vanuit je project, maar je hebt ook de klassen nodig om toegang te krijgen tot elkaar, omdat velen van hen bijna zeker zullen erven of samengesteld zullen zijn uit andere klassen in de bibliotheek. Dit betekent dat je niet alleen een paar van de lessen kunt pakken, ze naar je projectmap kunt extraheren en kunt verwachten dat ze werken.

Open een van de bestanden en bekijk de pakket verklaring. Bijvoorbeeld, in de minimalcomps zip, in het bestand /src/com/bit101/components/Accordion.as, de pakketverklaring is:

 pakket com.bit101.components

Zie hoe dit overeenkomt met de mappenstructuur? / Src /com / bit101 / components/Accordion.as. (En de klasse in het bestand wordt genoemd Accordeon.)

Het is niet alleen Keith Peters die netjes en opgeruimd is. Wanneer u een regel typt zoals:

 import com.bit101.components.Accordion;

? Flash zoekt naar een bestand met de naam Accordion.as in de mappenstructuur / Com / bit101 / components /. Het pakket moet overeenkomen met de mapstructuur, zodat Flash het bestand kan vinden; als je bent verhuisd Accordion.as naar een andere map, zoals / Com / bit101 / kaarten /, en probeerde te doen:

 import com.bit101.charts.Accordion;

? je krijgt een foutmelding:

 5001: de naam van het pakket 'com.bit101.components' geeft niet de locatie van dit bestand weer. Wijzig de naam van de pakketdefinitie in dit bestand of verplaats het bestand.

Klinkt logisch. Het pakket van de klasse vertelt u dus welke map de hoofdmap van de bibliotheek is; het is het eerste woord vóór de eerste punt in de pakketnaam -- com in dit geval. Dit betekent dat u de / Com / map en al zijn submappen naar de hoofdcodemap van uw project.


Wat is de hoofdcodefolder?

Tip: U zult vaak merken dat de hoofdmap van de bibliotheek wordt aangeroepen / Com / of /netto/ of / Org /, omdat het een gebruikelijke afspraak is om uw domeinnaam (omgekeerd) te gebruiken als de pakketstructuur. Bijvoorbeeld, we zijn http://active.tutsplus.com dus als we een bibliotheek hebben vrijgegeven, zou het pakket beginnen com.tutsplus.active. Als iedereen vasthoudt aan zijn eigen domeinnamen, hoeft niemand zich zorgen te maken over het per ongeluk maken van een bibliotheek met dezelfde pakketnamen als de bibliotheek van iemand anders. Dit is echter geen universele afspraak; noch Box2D noch de Greensock-bibliotheken gebruiken het.

De hoofdcodemap is de term die ik gebruik om naar de map te verwijzen waar Flash naar uw AS-bestanden zoekt (en mappen die AS-bestanden bevatten).

Als u Flash Professional gebruikt, is dit standaard de map waarin uw FLA zich bevindt. U kunt dit echter wijzigen; zie de snelle tip van Daniel Apt, Hoe uw Flash-projectbestanden te organiseren, voor meer informatie.

Als u een andere Flash-editor gebruikt, kan de map alles worden genoemd, maar er is waarschijnlijk een map met de naam / Src / of /bron/ of /code/ of iets dergelijks, dus je kunt het uitzoeken. (Als al het andere faalt, maakt u gewoon een nieuw AS-bestand en bekijkt u wat de standaardopslaglocatie is.)

Probeer het - download MinimalComps, pak de zip uit en kopieer de juiste map naar de hoofdcodemap van uw project. Dan, import com.bit101.components.Accordion; en maak een nieuwe accordeon () ergens in je project. Als je geen foutmelding ziet, dan heb je het goed gedaan!


Wereldwijde klassenpaden

Wat als u een bibliotheek zo handig vond dat u deze standaard beschikbaar wilde hebben voor al uw projecten, zonder de hoofdmap naar de hoofdcodemap van elk nieuw project te kopiëren en te plakken?

Hiervoor kunt u gebruiken globale klassenpaden. Als u een map op uw harde schijf opgeeft als globaal klassenpad, vertelt u Flash dat u daar altijd naar klassen moet zoeken, net zoals in de hoofdcodemap van het project.

Laten we aannemen dat je een map aanmaakt C: \ FlashLibraries \ (Mac-gebruikers: denk Macintosh HD / Flash-bibliotheken in plaats daarvan), met een submap MinimalComps, en kopieer het / Com / map van de MinimalComps zip naar deze MinimalComps directory. Het bestand Accordion class zou op C: \ FlashLibraries \ MinimalComps \ com \ bit101 \ componenten \ Accordion.as. Je zou dan kunnen instellen C: \ FlashLibraries \ MinimalComps \ als een globaal klassenpad, en vanaf dat moment kon elk Flash-project dat u opende, worden uitgevoerd:

 import com.bit101.components.Accordion;

? probleemloos. En aangezien Flash alleen klassen compileert die daadwerkelijk in uw project worden gebruikt, zal het uw SWF niet blokkeren met de bibliotheken in uw globale klassenpad die u niet doen gebruik.

Je zou zelfs alle rootcodeklassen van al je bibliotheken kunnen extraheren naar hetzelfde globale klassenpad - d.w.z. dat je zou kunnen instellen C: \ FlashLibraries \ als een globaal klassenpad en kopieer het / Com / map van de MinimalComps naar deze map, zodat de Accordion-klasse zich zou bevinden C: \ FlashLibraries \ com \ bit101 \ componenten \ Accordion.as. (Dit is waarschijnlijk niet de moeite waard, als je onze imaginaire Activetuts + -bibliotheek hebt gedownload, zou het erin zitten C: \ FlashLibraries \ com \ tutsplus \ actief \, wat betekent dat de / Com / map bevat zowel een / Bit101 / map en a / Tutsplus / map. Dat is geen probleem, maar het wordt rommelig en het kan het erg moeilijk maken om later een enkele bibliotheek te verwijderen.)


Een globaal klassenpad instellen

Klik in Flash CS3 op Bewerken | voorkeuren, klik vervolgens op de ActionScript categorie en selecteer ActionScript 3.0-instellingen. Je ziet een lijst met mappen. Klik op het plusteken om een ​​nieuw toe te voegen; u kunt de locatie in typen of op het doel drukken om ernaar te bladeren.

In latere versies van Flash Professional is er iets meer aan de hand. Klik Bewerken | voorkeuren, kies vervolgens de ActionScript categorie en klik ActionScript 3.0-instellingen zoals eerder. Het inschrijfformulier is een beetje anders:

Gebruik deze keer de Bronpad sectie om de globale klassenpaden in te stellen. Gebruik het plusteken om een ​​nieuw item toe te voegen en het mappictogram om naar de map te bladeren.

Als u een andere ontwikkelomgeving gebruikt, zijn de globale klassenpadinstellingen ergens anders. Selecteer bijvoorbeeld in FlashDevelop Project | eigenschappen, dan de Classpaths tab en klik Globale klassenpaden bewerken? .


Klas paden op project- of documentniveau

Wat doe je als de ontwikkelaar van de bibliotheek een nieuwe versie uitbrengt? U kunt het downloaden naar een globaal klassenpad, de vorige versie overschrijven en het gaan gebruiken in uw nieuwste project. Maar als je een van je oudere projecten opent - een die de vorige versie van de bibliotheek gebruikte - kom je allerlei incompatibiliteitsproblemen tegen.

U kunt dit oplossen door één map te hebben voor elke versie van de bibliotheek: C: \ FlashLibraries \ MinimalComps \ v1 \, C: \ FlashLibraries \ MinimalComps \ v2 \, C: \ FlashLibraries \ MinimalComps \ v2.5 \, C: \ FlashLibraries \ MinimalComps \ v3 \,? enzovoorts. Wanneer u vervolgens een project opent, maakt u een nieuw globaal klassenpad als de map voor de versie van de bibliotheek die uw project nodig heeft en verwijdert u alle andere.

Dat werkt, maar het is een vreselijke workflow. In plaats daarvan kunt u een klassenpad instellen dat specifiek is voor één project.


Hoe een klassenpad op project- of documentniveau in te stellen

In Flash Professional CS3 en hoger klikt u nadat u een FLA hebt geopend Bestand | Publiceer instellingen, selecteer vervolgens de Flash tab en klik instellingen naast ActionScript 3.0. In Flash CS3 ziet het dialoogvenster er als volgt uit:

Net zoals bij het instellen van een globaal klassenpad, kunt u de plusknop gebruiken om een ​​nieuw item toe te voegen en het doelpictogram om naar een map te bladeren. In latere versies van Flash heeft het dialoogvenster meer te bieden:

Maak je geen zorgen over de andere tabbladen; gebruik gewoon de Bronpad tab om uw gewenste klassenpad toe te voegen.

Nogmaals, verschillende ontwikkelomgevingen zullen deze instellingen op verschillende plaatsen opslaan. Als u een projectklassepad in FlashDevelop wilt toevoegen, selecteert u Project | eigenschappen, dan de Classpaths tab en klik Classpath toevoegen? .


Relatieve paden

Stel je voor dat je een Flash-game bouwt met iets andere versies voor verschillende gameportals en een aparte level-editor. Uw mappenstructuur kan er als volgt uitzien:

 C: \ MyAwesomeGame \ game_core \ C: \ MyAwesomeGame \ game_kongregate \ C: \ MyAwesomeGame \ game_newgrounds \ C: \ MyAwesomeGame \ levelEditor \

Stel nu dat je MinimalComps in alle versies van je spel wilt gebruiken, en in je niveau-editor - niet zomaar een oude versie van MinimalComps, maar specifiek de nieuwste versie, in elk project. Ondertussen heb je een ander project dat is geschreven met een oude versie van MinimalComps, dus je wilt geen globaal klassenpad gebruiken.

Je kunt een nieuwe map aanmaken in je basismap:

 C: \ MyAwesomeGame \ libraries \

? en kopieer de hoofdmap van de bibliotheek er direct naartoe, zodat de klasse Accordion zich zou bevinden C: \ MyAwesomeGame \ libraries \ com \ bit101 \ componenten \ Accordion.as.

Nu weet je dat je een klassenpad op project- of documentniveau kunt instellen in elk van de verschillende gameversies, en de leveleditor om te wijzen naar C: \ MyAwesomeGame \ libraries \, maar wat als je alle spelbestanden met iemand anders moet delen - misschien een heel team? Ze moeten ervoor zorgen dat hun mappenstructuur exact overeenkomt met die van jou, of ze moeten alle projecten doorlopen en de klassenpaden aanpassen aan hun computer, elke keer als ze de nieuwste versie hebben. Wat een pijn!

In plaats daarvan kunt u een relatief klassenpad. Ervan uitgaande dat de hoofdcodemap van de niveaueditor is / Leveleditor /, dan als je een klassenpad instelt van ? / Libraries / het zal in de juiste map kijken. Waarom? Omdat ? / betekent "de map boven de huidige".

Dit betekent dat je kunt gebruiken ? / Libraries / voor alle versies van je spel, en ze wijzen allemaal naar dezelfde map. En als je de code vervolgens deelt met je teamgenoten, kun je ze het volledige wachtwoord geven / MyAwesomeGame / map en het zal bevatten alles Zij hebben nodig. Er is minder voor u om te onthouden om te doen - niet nodig om de klassenpaden te veranderen of elke nieuwe versie van de bibliotheek naar de verschillende mappen te kopiëren - en dus is er veel minder kans op het maken van een eenvoudige fout. Super goed!

(Je zou dit nog verder kunnen nemen en alle code die de verschillende versies van de game delen delen in de map C: \ MyAwesomeGame \ shared \? maar dat komt weg van het onderwerp van dit artikel!)

Je kunt de special nesten ? / directory, ook: ? /? / gaat twee mappen omhoog in plaats van één, enzovoort. Je kan ook gebruiken ./ om te verwijzen naar "de huidige map".


SWC-bestanden

Zoals ik al zei, een SWC-bestand is in feite een zipbestand met ActionScript-klassen en andere dergelijke gegevens. In mijn FlashDevelop-handleiding legde ik bijvoorbeeld uit hoe bibliotheekitems die in Flash Professional zijn gemaakt, als een SWC kunnen worden geëxporteerd, zodat ze in een andere workflow kunnen worden gebruikt. Het is mogelijk om hetzelfde te doen met puur op code gebaseerde klassen.

Ik zal hier niet uitleggen hoe je zo'n SWC kunt maken, maar ik zal de twee belangrijkste voordelen voor ontwikkelaars van bibliotheken uitleggen:

  1. De volledige bibliotheek (inclusief grafische elementen) kan in één bestand worden opgeslagen.
  2. De inhoud van de afzonderlijke klassen (dat wil zeggen de AS-bestanden) kan niet worden bekeken of gewijzigd.

Je hebt nog steeds de keuze om de SWC-bibliotheek te gebruiken in één project, in al je projecten, of om ze met een paar te delen, hoewel de middelen om ze op te nemen in je projecten iets anders zijn dan wanneer je de eigenlijke klassebestanden hebt.


SWC-bibliotheken gebruiken in uw projecten

Flash Professional CS3 heeft enkele belangrijke beperkingen als het gaat om het gebruik van SWC-bibliotheken: het kan geen SWC's gebruiken die slechts een verzameling klassebestanden zijn. Als de SWC bevat componenten, je kunt het naar je verplaatsen / Components / map op uw harde schijf en sleep deze vervolgens (binnen Flash) vanuit het paneel Componenten naar uw bibliotheek of stage. Deze map staat op C: \ Program Files \ Adobe \ Adobe Flash CS3 \taal\ Configuration \ Components \ standaard in Windows, en Macintosh HD / Toepassingen / Adobe Flash CS3 / configuratie / componenten standaard op Mac OS X.

U kunt SWC-componenten kopiëren naar de equivalente mappen in Flash Professional CS4 + als u ze wilt openen via het paneel Componenten. Voor SWC's die zijn samengesteld uit codeklassen, kunt u deze ook instellen als een globaal klassenpad of een klassenpad op documentniveau of projectniveau.

Klik op om een ​​globaal klassenpad in te stellen Bewerken | voorkeuren, kies vervolgens de ActionScript categorie en klik ActionScript 3.0-instellingen zoals eerder. Je ziet dit dialoogvenster:

Voeg de locaties van uw SWC's toe aan de Bibliotheekpad. Zoals het dialoogvenster aangeeft, kunt u verschillende SWC's in dezelfde map plaatsen en naar die map wijzen.

(De Extern bibliotheekpad box kan worden gebruikt om SWC-bibliotheken op te geven die tijdens runtime moeten worden geladen, in plaats van wanneer het onderdeel wordt gecompileerd. Als u grote hoeveelheden code en items hebt die worden gedeeld tussen uw projecten, kunt u de laadtijd voor uw gebruikers verkorten door alle gedeelde bronnen in een SWC-bestand te plaatsen en het als een externe bibliotheek te gebruiken; gebruikers hoeven het dan maar één keer te downloaden en kunnen het dan in elk van uw andere projecten gebruiken. Dit is waarschijnlijk niet wat je wilt doen met bibliotheken die je hebt gedownload!)

Als u een SWC op documentniveau in Flash Pro CS4 en hoger wilt instellen, klikt u nadat u een FLA hebt geopend Bestand | Publiceer instellingen, selecteer vervolgens de Flash tab en klik instellingen naast ActionScript 3.0. Schakel over naar de Bibliotheekpad tab. Het dialoogvenster ziet er als volgt uit:

U kunt hier relatieve paden gebruiken, net zoals wanneer u de individuele klassebestanden hebt.

Verschillende ontwikkelomgevingen hebben verschillende manieren om SWC's te importeren. Zie mijn handleiding voor informatie over het gebruik van SWC's in FlashDevelop.

Ik hoop dat dat helpt! Nu, als een tutorial zegt: "download deze bibliotheek", zou je precies moeten weten wat je moet doen :) Laat me weten als er iets onduidelijk is en ik zal het voor je verduidelijken.