Uso dei contenitori degli oggetti di visualizzazione

Flash Player 9 e versioni successive, Adobe AIR 1.0 e versioni successive

Se un oggetto DisplayObjectContainer viene rimosso dall'elenco di visualizzazione, o se viene spostato o trasformato in qualunque altro modo, il relativo oggetto di visualizzazione presente in DisplayObjectContainer viene rimosso, spostato o trasformato.

Un contenitore di oggetti di visualizzazione è a sua volta un tipo di oggetto di visualizzazione e può essere inserito in un altro contenitore di oggetti di visualizzazione. L'immagine seguente, ad esempio, mostra un contenitore di oggetti di visualizzazione, pictureScreen , contenente una forma di contorno e quattro altri contenitori di oggetti di visualizzazione (di tipo PictureFrame):

Visualizzazione dell’elemento grafico a dimensioni intere
A.
Forma che definisce il bordo del contenitore di oggetti di visualizzazione pictureScreen

B.
Quattro contenitori di oggetti di visualizzazione secondari rispetto all'oggetto pictureScreen

Per fare in modo che un oggetto di visualizzazione venga riportato in un elenco di visualizzazione, è necessario inserirlo in un contenitore di oggetti di visualizzazione già presente nell'elenco di visualizzazione. Per fare ciò, utilizzate il metodo addChild() o addChildAt() dell'oggetto contenitore. Senza, ad esempio, la riga finale del codice seguente, l'oggetto myTextField non verrebbe visualizzato:

var myTextField:TextField = new TextField(); 
myTextField.text = "hello"; 
this.root.addChild(myTextField);

In questo codice di esempio, this.root punta al contenitore di oggetti di visualizzazione MovieClip che contiene il codice. Nel codice effettivo, potete specificare un contenitore differente.

Utilizzate il metodo addChildAt() per inserire l'elemento secondario in una posizione specifica dell'elenco secondario del contenitore di oggetti di visualizzazione. Tali posizioni di indice a base zero dell'elenco secondario si riferiscono al livello (ordine di profondità) degli oggetti di visualizzazione. Consideriamo, ad esempio, i seguenti tre oggetti di visualizzazione. Ogni oggetto è stato creato a partire da una classe personalizzata denominata Ball.

L'ordinamento su livelli di questi oggetti di visualizzazione all'interno del contenitore può essere modificato mediante il metodo addChildAt() . Consideriamo l'esempio del codice seguente:

ball_A = new Ball(0xFFCC00, "a"); 
ball_A.name = "ball_A"; 
ball_A.x = 20; 
ball_A.y = 20; 
container.addChild(ball_A); 
 
ball_B = new Ball(0xFFCC00, "b"); 
ball_B.name = "ball_B"; 
ball_B.x = 70; 
ball_B.y = 20; 
container.addChild(ball_B); 
 
ball_C = new Ball(0xFFCC00, "c"); 
ball_C.name = "ball_C"; 
ball_C.x = 40; 
ball_C.y = 60; 
container.addChildAt(ball_C, 1);

Una volta eseguito il codice, gli oggetti di visualizzazione vengono disposti come segue nell'oggetto DisplayObjectContainer di container . Osservate il posizionamento degli oggetti.

Per riposizionare un oggetto all'inizio dell'elenco di visualizzazione, è necessario semplicemente reinserirlo nell'elenco. Dopo l'esecuzione del codice precedente, per spostare ad esempio ball_A sopra gli altri cerchi, eseguite questa riga di codice:

container.addChild(ball_A);

Questo codice non fa che rimuovere ball_A dalla posizione in cui si trova nell'elenco di visualizzazione di container per reinserirlo in cima all'elenco, con il risultato di posizionare il cerchio sopra gli altri due.

Potete utilizzare il metodo getChildAt() per verificare l'ordine dei livelli degli oggetti di visualizzazione. Il metodo getChildAt() restituisce oggetti secondari di un contenitore in base al numero di indice inserito. Il codice seguente, ad esempio, rivela nomi di oggetti di visualizzazione che si trovano in varie posizioni dell'elenco secondario dell'oggetto DisplayObjectContainer di container :

trace(container.getChildAt(0).name); // ball_A 
trace(container.getChildAt(1).name); // ball_C 
trace(container.getChildAt(2).name); // ball_B

Se rimovete un oggetto di visualizzazione dall'elenco secondario del contenitore principale, gli elementi di rango superiore in elenco scalano di una posizione nell'elenco secondario. Continuando, ad esempio, con il codice precedente, il codice che segue mostra come l'oggetto di visualizzazione che si trovava nella posizione 2 nell'elenco DisplayObjectContainer del contenitore passa alla posizione 1 se un oggetto di visualizzazione più in basso nell'elenco viene rimosso:

container.removeChild(ball_C); 
trace(container.getChildAt(0).name); // ball_A 
trace(container.getChildAt(1).name); // ball_B

I metodi removeChild() e removeChildAt() non consentono di eliminare completamente un'istanza di un oggetto di visualizzazione. Essi consentono solo di rimuoverla dall'elenco secondario del contenitore. L'istanza può ancora essere utilizzata come riferimento da un'altra variabile (per rimuovere completamente un oggetto, utilizzate l'operatore delete ).

Poiché un oggetto di visualizzazione presenta un solo contenitore principale, è possibile aggiungere un'istanza di un oggetto di visualizzazione a un solo contenitore di oggetti di visualizzazione. Il codice seguente mostra, ad esempio, come l'oggetto di visualizzazione tf1 possa esistere unicamente in un contenitore (in questo caso, un oggetto Sprite che estende la classe DisplayObjectContainer):

tf1:TextField = new TextField(); 
tf2:TextField = new TextField(); 
tf1.name = "text 1"; 
tf2.name = "text 2"; 
 
container1:Sprite = new Sprite(); 
container2:Sprite = new Sprite(); 
 
container1.addChild(tf1); 
container1.addChild(tf2); 
container2.addChild(tf1); 
 
trace(container1.numChildren); // 1 
trace(container1.getChildAt(0).name); // text 2 
trace(container2.numChildren); // 1 
trace(container2.getChildAt(0).name); // text 1

Se inserite un oggetto di visualizzazione contenuto in un contenitore di oggetti di visualizzazione in un altro contenitore di oggetti di visualizzazione, l'oggetto viene rimosso dal primo elenco secondario del contenitore di oggetti di visualizzazione.

Oltre ai metodi descritti sopra, la classe DisplayObjectContainer definisce vari altri metodi per utilizzare gli oggetti di visualizzazione secondari, quali:

  • contains() : consente di determinare se un oggetto di visualizzazione è un elemento secondario di DisplayObjectContainer.

  • getChildByName() : consente di recuperare un oggetto in base al nome.

  • getChildIndex() : restituisce la posizione di indice di un oggetto di visualizzazione.

  • setChildIndex() : consente di modificare la posizione di un oggetto di visualizzazione secondario.

  • removeChildren() : rimuove più oggetti di visualizzazione secondari.

  • swapChildren() : consente di invertire l'ordine di profondità di due oggetti di visualizzazione.

  • swapChildrenAt() : consente di invertire l'ordine di profondità di due oggetti di visualizzazione, specificati in base al rispettivo valore di indice.

Per ulteriori informazioni, vedete le voci pertinenti nella Guida di riferimento di Adobe ActionScript 3.0 per la piattaforma Adobe Flash .

Ricordate che un oggetto di visualizzazione che non si trova nell'elenco di visualizzazione (non incluso in un contenitore di oggetti di visualizzazione secondario allo stage) viene definito oggetto di visualizzazione fuori elenco .