Come utilizzare una libreria esterna nei progetti Flash

Quindi hai letto di una fantastica libreria, motore o API Flash e vuoi utilizzarla nel tuo progetto. Lo scarichi? ma è un file strano che non sai usare (un SWC), o un milione di cartelle di file AS - niente che dice "fai doppio clic per installarmi". Che diamine?

Una libreria è solo una raccolta di classi ActionScript che sono state progettate in modo tale da non essere legate a nessun progetto e possono essere utilizzate in tutto ciò che stai creando. Questi file di classe possono essere raggruppati in un singolo file SWC, che è come un zip.

Userò l'eccellente MinimalComps di Keith Peters come esempio, perché è disponibile sia in formato SWC che in formato cartella. Lo stesso vale per tutte le librerie, le API e i motori AS3; alcuni altri grandi esempi sono Box2DFlash e Greensock Tweening Platform.

Iniziamo guardando cosa fare se apri lo zip e ti trovi di fronte ai file di classe grezzi:


Un milione di cartelle di file AS

Ogni file AS, come sai, contiene una classe (ok, forse contiene diverse classi o un'interfaccia, ma lavora con me qui). Devi essere in grado di accedere a queste classi dal tuo progetto, ma hai anche bisogno che le classi siano in grado di accedere l'un l'altro, dal momento che molte di esse quasi certamente erediteranno o saranno composte da altre classi nella libreria. Ciò significa che non puoi semplicemente prendere alcune classi, estrarle nella cartella del tuo progetto e aspettarti che funzionino.

Apri uno dei file e dai un'occhiata al pacchetto dichiarazione. Ad esempio, nel file zip minimalcomps, nel file /src/com/bit101/components/Accordion.as, la dichiarazione del pacchetto è:

 pacchetto com.bit101.components

Guarda come questo corrisponde alla struttura delle cartelle? / Src /com / bit101 / componenti/Accordion.as. (E viene chiamata la classe nel file Fisarmonica.)

Non è solo Keith Peters essere pulito e in ordine. Quando si digita una riga come:

 import com.bit101.components.Accordion;

? Flash cerca un file chiamato Accordion.as nella struttura della cartella / com / bit101 / componenti /. Il pacchetto deve corrispondere alla struttura della cartella, in modo che Flash possa trovare il file; se ti sei trasferito Accordion.as in un'altra cartella, come / com / bit101 / grafici /, e ho provato a fare:

 import com.bit101.charts.Accordion;

? riceverai un messaggio di errore:

 5001: il nome del pacchetto "com.bit101.components" non riflette la posizione di questo file. Si prega di cambiare il nome della definizione del pacchetto all'interno di questo file, o spostare il file.

Ha senso. Quindi, il pacchetto della classe ti dice quale cartella è la cartella principale della libreria; è la prima parola prima del primo punto nel nome del pacchetto -- com in questo caso. Questo significa che dovresti spostare il / Com / cartella e tutte le relative sottocartelle alla directory del codice principale del progetto.


Qual è la directory del codice principale?

Mancia: Troverete spesso che viene chiamata la cartella radice per la libreria / Com / o /netto/ o / Org /, perché è una convenzione comune utilizzare il nome di dominio (al contrario) come struttura del pacchetto. Ad esempio, lo siamo http://active.tutsplus.com quindi se avessimo rilasciato una libreria, il pacchetto sarebbe iniziato com.tutsplus.active. Se ognuno si attacca ai propri nomi di dominio, non c'è da preoccuparsi se qualcuno crea accidentalmente una libreria con gli stessi nomi di pacchetto della libreria di qualcun altro. Tuttavia, questa non è una convenzione universale; né Box2D né le librerie di Greensock lo usano.

La directory del codice principale è il termine che uso per riferirsi alla cartella in cui Flash cerca i tuoi file AS (e le cartelle che contengono file AS).

Se utilizzi Flash Professional, quindi, per impostazione predefinita, questa sarà la cartella in cui si trova il tuo FLA. Puoi comunque modificarlo; vedere il suggerimento rapido di Daniel Apt, Come organizzare i file di progetto Flash, per maggiori informazioni.

Se stai usando un altro editor Flash, la cartella potrebbe essere chiamata qualsiasi cosa - ma probabilmente ci sarà una cartella chiamata / Src / o /fonte/ o /codice/ o qualcosa di simile, quindi puoi capirlo. (Se tutto il resto fallisce, basta creare un nuovo file AS e controllare quale sia il percorso di salvataggio predefinito.)

Provalo - scarica MinimalComps, estrai lo zip e copia la cartella corretta nella directory del codice principale del tuo progetto. Poi, import com.bit101.components.Accordion; e creare a nuova fisarmonica () da qualche parte nel tuo progetto. Se non vedi un messaggio di errore, allora hai fatto bene!


Classpathpaths globale

Cosa succede se hai trovato una libreria così utile da volere che fosse disponibile per tutti i tuoi progetti per impostazione predefinita, senza dover copiare e incollare la cartella principale nella directory del codice principale di ogni nuovo progetto?

Per questo, puoi usare Classpathpath globali. Se si specifica una cartella sul disco rigido come percorso di classe globale, si sta dicendo a Flash di cercare sempre le classi lì, così come nella directory del codice principale del progetto.

Supponiamo che tu crei una directory C: \ FlashLibraries \ (Utenti Mac: pensa Macintosh HD / FlashLibraries invece), con una sottodirectory MinimalComps, e copia il / Com / cartella dallo zip MinimalComps a questo MinimalComps directory. Il file di classe Accordion sarebbe a C: \ FlashLibraries \ MinimalComps \ com \ bit101 \ componenti \ Accordion.as. Potresti quindi impostare C: \ FlashLibraries \ MinimalComps \ come un classpath globale e da quel momento in poi, ogni progetto Flash che avresti aperto sarebbe stato in grado di eseguire:

 import com.bit101.components.Accordion;

? senza alcun problema. E poiché Flash compila solo le classi effettivamente utilizzate nel tuo progetto, non riempirà il tuo SWF con le librerie nel tuo classpath globale che tu non uso.

Potresti anche estrarre tutte le classi di codice radice di tutte le tue librerie sullo stesso classpath globale - cioè, potresti impostare C: \ FlashLibraries \ come percorso di classe globale, quindi copiare il file / Com / cartella da MinimalComps a questa cartella, quindi la classe Accordion sarebbe a C: \ FlashLibraries \ com \ bit101 \ componenti \ Accordion.as. (Questo probabilmente non vale la pena, però, se hai scaricato la nostra immaginaria libreria Activetuts +, ci siederebbe C: \ FlashLibraries \ com \ tutsplus \ attivo \, il che significa che il / Com / la cartella conterrà entrambi a / Bit101 / cartella e a / Tutsplus / cartella. Questo non è un problema, ma diventa disordinato e può rendere molto difficile eliminare una singola libreria in seguito.)


Come impostare un percorso di classe globale

In Flash CS3, fai clic su Modifica | Preferenze, quindi fare clic su ActionScript categoria e selezionare Impostazioni di ActionScript 3.0. Vedrai un elenco di cartelle. Fare clic sul segno più per aggiungerne uno nuovo; è possibile digitare la posizione in, o premere il bersaglio per navigare ad essa.

Nelle versioni successive di Flash Professional, c'è un po 'di più. Clic Modifica | Preferenze, quindi scegliere il ActionScript categoria e clicca Impostazioni di ActionScript 3.0 come prima. Il modulo di iscrizione è leggermente diverso:

Questa volta, usa il Percorso di origine sezione per impostare i percorsi di classe globali. Utilizzare il segno più per aggiungere una nuova voce e l'icona della cartella per navigare nella cartella.

Se si utilizza un ambiente di sviluppo diverso, le impostazioni globali del percorso di classe saranno da qualche altra parte. Ad esempio, in FlashDevelop, selezionare Progetto | Proprietà, poi il classpath scheda e fare clic Modifica percorsi classe globali? .


Classpath di progetto o livello di documento

Cosa fai se lo sviluppatore della libreria rilascia una nuova versione? È possibile scaricarlo in un classpath globale, sovrascrivendo la versione precedente e iniziare a utilizzarlo nel progetto più recente. Ma se apri uno dei tuoi progetti più vecchi - uno che utilizzava la versione precedente della libreria - ti imbatterai in tutti i tipi di problemi di incompatibilità.

Puoi risolvere questo problema disponendo di una cartella per ogni versione della libreria: C: \ FlashLibraries \ MinimalComps \ v1 \, C: \ FlashLibraries \ MinimalComps \ v2 \, C: \ FlashLibraries \ MinimalComps \ v2.5 \, C: \ FlashLibraries \ MinimalComps \ v3 \,? e così via. Quindi, ogni volta che hai aperto un progetto, dovresti creare un nuovo classpath globale come cartella per la versione della libreria richiesta dal tuo progetto ed eliminare tutti gli altri.

Funziona, ma è un flusso di lavoro orribile. Invece, puoi impostare un classpath specifico per un progetto.


Come impostare un percorso di classe Project o Document-Level

In Flash Professional CS3 e versioni successive, dopo aver aperto un FLA, fai clic su File | Pubblica impostazioni, quindi selezionare il Veloce scheda e fare clic impostazioni accanto a ActionScript 3.0. In Flash CS3, la finestra di dialogo ha il seguente aspetto:

Proprio come quando si imposta un percorso di classe globale, è possibile utilizzare il pulsante Più per aggiungere una nuova voce e l'icona Destinazione per individuare una cartella. Nelle versioni successive di Flash, il dialogo ha di più:

Non preoccuparti per le altre schede; basta usare il Percorso di origine scheda per aggiungere il percorso di classe desiderato.

Ancora una volta, diversi ambienti di sviluppo memorizzeranno queste impostazioni in luoghi diversi. Per aggiungere un classpath di progetto in FlashDevelop, selezionare Progetto | Proprietà, poi il classpath scheda e fare clic Aggiungi percorso di classe? .


Percorsi relativi

Immagina di creare un gioco Flash con versioni leggermente diverse per portali di gioco diversi e un editor di livelli separato. La struttura della cartella potrebbe essere simile a questa:

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

Supponiamo ora di voler utilizzare MinimalComps in tutte le versioni del gioco, e nel tuo editor di livelli - non solo una versione precedente di MinimalComps, ma in particolare l'ultima versione, in ogni progetto. Nel frattempo, hai un altro progetto scritto con una vecchia versione di MinimalComps, quindi non vuoi usare un classpath globale.

Puoi creare una nuova cartella all'interno della tua cartella di gioco di base:

 C: \ MyAwesomeGame \ librerie \

? e quindi copia la cartella radice della libreria direttamente su di essa, quindi la classe Accordion si troverà a C: \ MyAwesomeGame \ librerie \ com \ bit101 \ componenti \ Accordion.as.

Ora, sai che puoi impostare un percorso di classe a livello di progetto o documento in ciascuna delle diverse versioni del gioco e l'editor di livelli, per indicare C: \ MyAwesomeGame \ librerie \, ma cosa succede se hai bisogno di condividere tutti i file del gioco con qualcun altro - forse un'intera squadra? Dovranno accertarsi che la struttura delle cartelle corrisponda esattamente alla tua, o passare attraverso ciascuno dei progetti e modificare i percorsi di classe in modo che corrispondano al loro computer, ogni volta che ottengono l'ultima versione. Che dolore!

Invece, puoi usare a classpath relativo. Supponendo che la directory del codice principale dell'editor di livelli sia / Editor di livelli /, quindi se imposti un classpath di ? / librerie / apparirà nella cartella corretta. Perché? Perché ? / significa "la directory sopra quella corrente".

Questo significa che puoi usare ? / librerie / per tutte le versioni del gioco e puntano tutte alla stessa directory. E poi, quando condividi il codice con i tuoi compagni di squadra, puoi dare loro l'intero / MyAwesomeGame / cartella e conterrà qualunque cosa loro hanno bisogno. C'è meno da ricordare per fare - non c'è bisogno di cambiare i classpaths o copiare ogni nuova versione della libreria nelle varie cartelle - e quindi c'è meno possibilità di fare un semplice errore. grande!

(Si potrebbe prendere ulteriormente questo e mettere tutto il codice che le diverse versioni del gioco condividono nella cartella C: \ MyAwesomeGame \ shared \? ma questo è allontanarsi dall'argomento di questo articolo!)

Puoi annidare lo speciale ? / directory, anche: ? /? / sale due directory invece di una sola, e così via. Puoi anche usare ./ fare riferimento a "l'attuale directory".


File SWC

Come ho detto, un file SWC è fondamentalmente un file zip contenente classi ActionScript e altri dati simili. Ad esempio, nella mia guida di FlashDevelop ho spiegato come esportare le risorse della libreria, create in Flash Professional, come un SWC in modo che possano essere utilizzate in un altro flusso di lavoro. È possibile fare lo stesso con classi puramente basate sul codice.

Non spiegherò come creare un tale SWC qui, ma spiegherò i due principali vantaggi per gli sviluppatori di librerie:

  1. L'intera libreria (comprese le risorse grafiche) può essere contenuta in un singolo file.
  2. I contenuti delle singole classi (cioè i file AS) non possono essere visualizzati o modificati.

Hai ancora la possibilità di utilizzare la libreria SWC in un singolo progetto, in tutti i tuoi progetti, o di condividerli tra alcuni di essi, sebbene i mezzi per includerli nei tuoi progetti siano leggermente diversi rispetto a quando hai i file di classe reali.


Utilizzo delle librerie SWC nei tuoi progetti

Flash Professional CS3 ha alcune limitazioni importanti quando si tratta di utilizzare le librerie SWC: non può utilizzare SWC che sono semplicemente una raccolta di file di classe. Se il SWC contiene componenti, puoi spostarlo sul tuo / Componenti / directory sul disco rigido, quindi (all'interno di Flash) trascinarlo dal pannello Componenti alla libreria o allo stage. Questa directory è a C: \ Programmi \ Adobe \ Adobe Flash CS3 \linguaggio\ Configuration \ Components \ per impostazione predefinita in Windows e Macintosh HD / Applicazioni / Adobe Flash CS3 / Configurazione / Componenti per impostazione predefinita su Mac OS X.

È possibile copiare i componenti SWC nelle cartelle equivalenti in Flash Professional CS4 + se si desidera accedervi tramite il pannello Componenti. Per gli SWC costituiti da classi di codice, è possibile anche impostarli come classpath globale o come percorso di classe del documento o del progetto.

Per impostare un percorso di classe globale, fare clic su Modifica | Preferenze, quindi scegliere il ActionScript categoria e clicca Impostazioni di ActionScript 3.0 come prima. Vedrai questa finestra di dialogo:

Aggiungi le posizioni dei tuoi SWC al Percorso della biblioteca. Come suggerisce la finestra di dialogo, è possibile inserire diversi SWC nella stessa cartella e puntare semplicemente a quella cartella.

(Il Percorso della libreria esterna box può essere usato per specificare le librerie SWC che dovrebbero essere caricate in fase di runtime, piuttosto che quando il componente è compilato. Se hai enormi quantità di codice e risorse condivise tra i tuoi progetti, puoi ridurre il tempo di caricamento per gli utenti inserendo tutte le risorse condivise in un file SWC e utilizzandolo come libreria esterna; gli utenti dovranno scaricarlo solo una volta e potranno quindi utilizzarlo in ciascuno dei tuoi altri progetti. Questo probabilmente non è quello che vuoi fare con le librerie che hai scaricato, però!)

Per impostare un SWC a livello di documento in Flash Pro CS4 e versioni successive, dopo aver aperto un FLA, fare clic su File | Pubblica impostazioni, quindi selezionare il Veloce scheda e fare clic impostazioni accanto a ActionScript 3.0. Passare al Percorso della biblioteca scheda. La finestra di dialogo ha il seguente aspetto:

Puoi utilizzare i percorsi relativi qui, proprio come quando hai i singoli file di classe.

Diversi ambienti di sviluppo avranno diversi modi per importare i SWC. Per informazioni sull'utilizzo degli SWC in FlashDevelop, consultare la mia guida.

Spero che aiuti! Ora, quando un tutorial dice "scarica questa libreria", dovresti sapere esattamente cosa fare :) Fammi sapere se qualcosa non è chiaro e te lo chiarirò per te.