Stiamo apportando alcune modifiche su Activetuts +. D'ora in poi, i nostri tutorial utilizzeranno il codice basato sulla classe, anziché il codice della timeline, laddove possibile. Questo suggerimento rapido spiega ciò che devi sapere.
Lo ammetterò - a volte, la codifica interamente sulla timeline è utile. È un modo rapido per testare un effetto e il modo più semplice per sincronizzare le azioni con fotogrammi specifici di un'animazione.
Ma per qualsiasi progetto che si basa più sul codice che sull'animazione, ci sono seri svantaggi. Tutto il tuo ActionScript è intrappolato all'interno del file FLA; non puoi dividere la programmazione tra diversi sviluppatori, devi copiare e incollare il codice se vuoi riutilizzarlo e sei obbligato a usare il pannello Azioni di Flash.
L'utilizzo dei file di classe imposta il tuo codice libero. Ed è davvero non più difficile di programmare sulla timeline; richiede solo un po 'più di setup. Ti guiderò attraverso la creazione di un progetto Flash che utilizza le classi, quindi suddividerà un file di classe in dettaglio.
(Parte del motivo per cui stiamo passando alle classi è rendere più semplice per gli sviluppatori AS3 che non usano Flash per seguire i nostri tutorial. Se sei uno di loro, mi aspetto che sei abituato a trattare con le classi già , ma puoi sempre leggere questo Quick Tip come aggiornamento - ignora solo i bit di Flash!)
Sono sicuro che sai già come farlo. Apri Flash e fai clic File> Nuovo ... File Flash (ActionScript 3.0). Salvalo dove vuoi Ho chiamato il mio Example.fla, ma non importa quale nome scegli.
Clic File> Nuovo ... File ActionScript. Salva questo come Main.as nella stessa cartella del FLA.
Questo file è dove metteremo il codice che alimenta il FLA stesso, ma in che modo Flash saprà come trovarlo?
Potresti avere dozzine di file AS nella stessa cartella del FLA, quindi Flash non vorrà indovinare quale usare. Dovremo dirlo.
Passa allo strumento Selezione (Scorciatoia: V), quindi assicurati di non aver selezionato nulla (premi Ctrl-Maiuscole-A). Aprire il pannello Proprietà (Finestra> Proprietà).
Se utilizzi Flash CS3, apparirà come segue:
accedere Principale nella casella "Document class" - che corrisponde al nome del file ActionScript, meno l'estensione ".as" del file ...
Se utilizzi Flash CS4, apparirà come segue:
In questo caso, dovrai inserire Principale nella casella "Classe". Per qualche ragione, Adobe ha rilasciato il bit "Document".
Non è necessario mantenere tutti i file nella stessa directory. Guarda questo screencast di Quick Tip se vuoi sapere come spostare le cose.
Apri il tuo file Main.as e incolla il seguente codice:
package import flash.display.MovieClip; public class Main estende MovieClip public function Main ()
Questa è una classe di documento vuota di base. È la più piccola quantità di codice che possiamo scrivere che verrà effettivamente eseguita. Lasciami scomporre:
La parola chiave package indica a Flash che tutto il codice tra le parentesi graffe fa parte di un singolo gruppo.
scrittura classe principale inoltre raggruppa il codice insieme, ma in un modo diverso. Le classi contengono funzioni e variabili; i pacchetti contengono classi e istruzioni di importazione.
Nota: devi dare alla tua classe lo stesso nome del file AS: Principale.
Che dire pubblico? Bene, questo significa solo che altre classi nel tuo codice saranno in grado di vedere questa classe.
Questa classe Principale sta per alimentare il nostro FLA. Per impostazione predefinita, il nostro FLA è un clip filmato (ha una sequenza temporale).
Vogliamo Principale essere in grado di fare tutto ciò che un filmato può fare, più in base al codice che scriviamo. In altre parole, vogliamo estendere la funzionalità di un normale Un filmato.
(A volte, potremmo non avere bisogno di animazioni sulla timeline principale dello stage, in questo caso non è necessario estendere MovieClip e possiamo semplicemente estendere Sprite. MovieClip stesso estende Sprite, ma aggiunge funzionalità extra per l'animazione, come il nextFrame () funzione. Quindi, se non sei sicuro se estendere MovieClip o Sprite, vai su MovieClip - è più sicuro!)
MovieClip è di per sé una classe.
Flash non tiene automaticamente traccia di dove sono memorizzati tutti i suoi file di classe; per il nostro estende MovieClip codice per funzionare, dobbiamo dire a Flash dove trovare la classe MovieClip. Questo è ciò che importare linea fa.
Le istruzioni di importazione vanno sempre all'interno del pacchetto e all'esterno della classe, nella parte superiore.
Ogni classe contiene una funzione con lo stesso nome della classe. Si chiama il costruttore funzione.
Tutto il codice all'interno di questa funzione viene eseguito quando viene creato un oggetto di questo tipo di classe - nel nostro caso, il codice tra queste parentesi graffe verrà eseguito quando viene caricato il file SWF.
Non ti preoccupare se senti di non capire ancora tutto ciò. Una volta che inizierai effettivamente a utilizzare le classi e a scrivere le tue, tutto si attiverà.
Come ho detto nel passaggio 5, la funzione di costruzione contiene il primo codice da eseguire quando viene caricato il file SWF. Quindi mettiamo qualcosa lì dentro per assicurarci che tutto funzioni:
package import flash.display.MovieClip; public class Main estende MovieClip public function Main () trace ("Yep, it's working");
La linea 8 è l'unica nuova lì. Metti alla prova il tuo SWF nel solito modo (Controllo> Prova filmato). Se tutto va bene, dovresti vedere il messaggio "Sì, funziona" nel pannello Output. Altrimenti…
Se nessuna di queste domande è di aiuto, per favore pubblica un commento.
Prova a sostituire il tuo codice Main.as con questo:
package import flash.display.MovieClip; public class Main estende MovieClip public function Main () var greeting: String = "Hello"; traccia (saluto);
Semplice, vero? Abbiamo appena creato una nuova variabile String all'interno della funzione di costruzione. Ora aggiungiamo una nuova funzione:
package import flash.display.MovieClip; public class Main estende MovieClip public function Main () var greeting: String = "Hello"; changeGreetingToFrench (); traccia (saluto); public function changeGreetingToFrench (): void greeting = "Bonjour";
Ci sono alcune cose da notare qui.
Innanzitutto, la nuova funzione entra nella classe e dopo il costruttore: per convenzione, il costruttore è la prima funzione della classe.
In secondo luogo, la nuova funzione è pubblico; quando si codifica all'interno di una classe (e non sulla timeline) è buona norma mettere "pubblico" (o "privato" o "protetto", ma lascerò quelli per un altro post) all'inizio della riga che definisce la funzione . È solo un modo per far sapere alle altre classi se possono o meno accedervi.
In terzo luogo, la definizione della nuova funzione termina con : void. Questo significa semplicemente che non restituisce un valore. Le funzioni del costruttore non hanno bisogno del : void perché essi non si può restituire un valore.
Se provi questo film, riceverai un messaggio di errore:
Main.as, Riga 15: 1120: accesso di un annuncio di proprietà non definito.
Quando si crea una variabile all'interno di una funzione, non è possibile accedere ad altre funzioni. Se vuoi che ogni funzione della classe sia in grado di accedere alla variabile, devi dichiararla all'interno della classe ma al di fuori tutte le funzioni:
package import flash.display.MovieClip; public class Main estende MovieClip public var greeting: String = "Hello"; public function Main () changeGreetingToFrench (); traccia (saluto); public function changeGreetingToFrench (): void greeting = "Bonjour";
Proprio come con le funzioni, se dichiari una variabile al di fuori di una funzione, devi avviarla con "pubblico" (o "privato" o "protetto"). A differenza delle funzioni, le variabili dovrebbero essere definite sopra il costruttore.
Metti alla prova il tuo film ora e dovresti finalmente ricevere un bel saluto in francese. Quanto è utile!
Quindi, questo non è esattamente un risultato entusiasmante, ma spero che ora ti senta in grado di seguire tutorial che non codificano sulla timeline.
Voglio davvero assicurarmi che tutti comprendano come utilizzare una classe di documenti, quindi per favore, se una di queste non è chiara, pubblica una nota nei commenti. Una volta risolta la confusione, modificheremo il suggerimento rapido per facilitare la comprensione della prossima persona. Grazie :)