Estendere i MovieClip in Adobe Flash MX

Mercoledì 17 Ottobre, 2007

Io 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à prototype viene 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à prototype viene 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:

Actionscript:
  1. MovieClip.prototype.move = function(x:Number, y:Number) {
  2.     this._x = x; this._y = y;
  3. }

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:

  1. Non può essere applicata a tutti gli oggetti esposti da Flash
  2. 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).

Actionscript:
  1. /*
  2. ** MovieExt.as
  3. */
  4. class MovieExt extends MovieClip {
  5.     function move(x:Number, y:Number) {
  6.          this._x = x; this._y=y;
  7.     }
  8. }

Dall'IDE Flash creare un MovieClip e selezionare proprietà:

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.

Post correlati

Un commento a: “Estendere i MovieClip in Adobe Flash MX”

  1. getAvatar 1.0 Venerdì 09 Novembre, 2007 alle 20:16
    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: [...]

Lascia un commento

TAG XHTML permessi: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Usa <pre> per racchiudere codice