Tutto quello che avete sempre sognato di fare con Actionscript 3
martedì 11 marzo, 2008Una fantastica innovazione introdotta con Actionscript 3.0 è quella di poter enumerare tutti gli oggetti (anche shape disegnate al momento) presenti in un contenitore (DisplayObjectContainer). In effetti era ora che Adobe introducesse questa feature. Mi ero sempre lamentato di questa mancanza, soprattutto perchè andando in debug l'ambiente Flash era in grado di svolgerla tranquillamente ma rimaneva completamente inaccessibile da codice!
In ActionScript 1.0 e 2.0, non era possibile accedere ad alcuni oggetti, quali forme vettoriali, disegnate nello strumento di creazione di Flash. In ActionScript 3.0, si può accedere a tutti gli oggetti presenti nell'elenco di visualizzazione, sia quelli creati in ActionScript che quelli realizzati con lo strumento di creazione di Flash.
Questa caratteristica non è assolutamente da sottovalutare. Nelle precedenti versioni di Actionscript, infatti, biosgnava tenere traccia degli oggetti in modo artificioso, usanto un array ad esempio. Inoltre non era comunque possibile accedere agli oggetti disegnati direttamente nell'IDE di Flash. Ora è possibile "scorrere" l'intero albero gerarchico individuando in modo semplice e veloce gli oggetti, e quindi tutti gli elementi, che lo compongono; dai TextField alle Shape.
Alcuni dei nuovi metodi e proprietà (messi a disposizione dall'oggetto DisplayObjectContainer) che permettono questo sono:
numChildren
Restituisce il numero di elementi secondari di un oggetto contenitore (DisplayObjectContainer)getChildAt()
Restituisce l'istanza dell'oggetto di visualizzazione secondario che si trova in corrispondenza della posizione di indice specificata.getChildByName()
Restituisce l'oggetto di visualizzazione secondario al quale corrisponde il nome specificato. Se più di un oggetto di visualizzazione secondario ha il nome specificato, il metodo restituisce il primo oggetto dell'elenco degli elementi secondari.
Ad esempio, partendo dalla root del filmato principale, il seguente codice ci fornisce il numero degli oggetti presenti nello stage:
-
trace(this.numChildren);
Questo semplice loop elenca tutti i "nomi" degli oggetti presenti nello stage:
-
child = container.getChildAt(i);
-
trace(child.name);
-
-
}
Provate a disegnare qualcosa sullo stage con glistrumeti di disegno messi a disposizione dall'IDE Flash ed eseguite questo codice:
-
child = container.getChildAt(i);
-
child.rotation = 20;
-
}
Fantastico! Anche gli oggetti Shape dell'IDE sono accessibili e modificabili a runtime, cosa prima sostanzialmente impossibile a meno che non si trasformavano in MovieClip con un nome di istanza!
Quello poi che è interessante è la possibilità di identificare gli oggetti che ci interessano tramite l'operatore is. Ad esempio è possibile identificare un oggetto (o simbolo) sia dal nome che dal tipo. Spesso, infatti, quando un simbolo è creato runtime dalla libreria il nome non ha significato (instance3) e risulta utile poterlo identificare dal tipo:
-
child = container.getChildAt(i);
-
// fai qualcosa ...
-
}
-
}
La cosa interessante è che se in libreria abbiamo esportato un MovieClip creando una nostra classe CMiaClasse possiamo scrivere:
-
child = container.getChildAt(i);
-
if( child is CMiaClasse) {
-
// fai qualcosa ...
-
}
-
}
Quest'ultima caratterista è davvero utilissima e permette un controllo pressocchè completo sulle istanze, soprattutto quando bisogna creare delle funzione per "scaricare" oggetti che non servono più! Ad esempio, ecco come far "sparire" le Shape disegnate a mani:
-
child = container.getChildAt(i);
-
}
Amazing!










19

Non ci sono commenti per questo Post
Lascia un commento