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):
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
.