Estendere i MovieClip in Adobe Flash MX
Mercoledì 17 Ottobre, 2007Io utilizzo due tecniche per estendere le funzionalità di un MovieClip. La prima, utilizzata anche nelle precedenti versioni di Flash MX, usa la proprietà prototype, un puntatore alla superclasse (madre), come indicato nel manuale:
Un riferimento alla superclasse di un oggetto classe o funzione. La proprietÃ
prototypeviene creata automaticamente e associata a qualsiasi oggetto classe o funzione creato. Questa proprietà è di tipo statico ed è specifica della classe o della funzione creata. Se, ad esempio, si crea una classe personalizzata, il valore della proprietÃprototypeviene condiviso da tutte le istanze della classe ed è accessibile solo come una proprietà della classe. Le istanze della classe personalizzata non possono accedere direttamente alla proprietÃprototype, ma possono accedervi mediante la proprietÃ__proto__.
Uno dei vantaggi nell'uso di prototype, soprattutto con i MovieClip, risiede nell'estensione di tutti i MovieClip, nessuno esluso. Di fatto si effettua un'estensione broadcast a tutti i MovieClip statici o dinamici. Ad esempio, una comoda estensione potrebbe essere:
-
MovieClip.prototype.move = function(x:Number, y:Number) {
-
this._x = x; this._y = y;
-
}
Da questo momento in poi qualsiasi MovieClip possiede un nuovo metodo chiamato move(), che permette di posizionare un MovieClip con una sola riga di codice. Il contesto (this) ovviamente è il MovieClip in oggetto. Due importanti limitazioni di questa tecnica sono:
- Non può essere applicata a tutti gli oggetti esposti da Flash
- Possono essere "aggiunti" solo metodi e non proprietÃ
Con l'avvento della versione MX, ed ora con la nuova CS3, è più conveniente utilizzare una classe, nonostante bisogna indicare ad ogni MovieClip che appartiene alla nuova classe da noi creata. Ad esempio, per riprodurre con una classe l'esempio che usava prototype basta create un file ActionScript (.as) e salvarlo nella cartella del nostro filmato con il nome MovieExt.as (il file deve avere lo stesso nome della classe - Flash lavora in "stretto" accordo con il filesystem).
-
/*
-
** MovieExt.as
-
*/
-
class MovieExt extends MovieClip {
-
function move(x:Number, y:Number) {
-
this._x = x; this._y=y;
-
}
-
}
Dall'IDE Flash creare un MovieClip e selezionare proprietà :
Da questo momento in poi la nostra clip sarà un'istanza di MovieExt che, a sua volta, eredita tutte le caratteristiche di un MovieClip grazie alla clausola extends MovieClip inserita nella dichiarazione della classe. Le nuove caratteristiche saranno disponibili sia in Design-mode che tramite attachMovie().
Il vatanggio di questa tecnica è una miglior organizzazione del codice e la possibilità di rendere polimorfici proprietà e metodi senza confusioni. Ovvero è possibile creare due classi entrambi con il metodo move() ad esempio, ma con comportamenti differenti. Inoltre sarà possibile aggiungere eventi e proprietà in modo semplice e standard. Unico svantaggio è l'impostazione forzata nella finiestra delle proprietà , unica operazione non possibile via codice.





















undolog » Blog Archive » Aggiungere proprietà ad un MovieClip ha detto:
[...] Aggiungere proprietà ad un MovieClip Tags: ActionScript, extends, Flash, getter, inheritance, MovieClip, property, Prototype, setter, SviluppoNel Post Estendere i MovieClip in Adobe Flash MX avevo illustrato alcune tecniche per estendere un MovieClip. In particolare avevo detto che l’uso di MovieClip.prototype non permetteva l’estensione di proprità ma solo di metodi: [...] Due importanti limitazioni di questa tecnica sono: [...]