« In arrivo l'estensione AIR per Flash CS3 | Index | Adobe AIR per sviluppatori Javascript »

um_minilogo.gif Cerchi articoli, tutorial e guide su Photoshop CS3, Flash CS3, Premiere Pro CS3, Actionscript 3, Flex 3 e Adobe AIR, Java e Microsoft Silverlight ?
Scarica gratis UserMatter, il magazine che tratta la User Experience. Nell'ultimo numero trovi anche: Introduzione alla programmazione orientata agli oggetti, Salvare le immagini per il web con una mappatura Alpha

Display list: un nuovo modo di gestire gli oggetti in ActionScript 3.0

A partire da oggi con questo post e per tutta la settimana approfondiremo le più importanti novità di Actionscript 3. Iniziamo con la gestione degli oggetti tramite il Display List.

In passato il movieclip e il concetto di profondità (depth) erano gli elementi fondamentali su cui si basava la visualizzazione degli elementi e il loro ordine “z” all’interno dello Stage di Flash.

In AS 3.0 tutto è radicalmente cambiato e la gestione degli elementi visivi è stata delegata alla nuova funzionalità Display List, una sorta di indice gerarchico in cui l’elemento inserito per primo avrà indice 0 e sarà visualizzato sotto tutti gli oggetti, mentre quello aggiunto per ultimo avrà indice più alto e sarà visualizzato sopra tutti gli altri.

L’elemento da visualizzare, indipendentemente dal fatto che sia un componente, una forma vettoriale disegnata con le drawing API (come in questo articolo) od un contenitore, dovrà prima di tutto essere creato e poi aggiunto alla DisplayList utilizzando, ad esempio, il metodo addChild della classe flash.display.DisplayObjectContainer.
All’inizio il passaggio potrà sembrare difficiltoso e poco intuitivo ma approfondendo l’argomento sarà facile intuire e notare come le cose siano state radicalmente semplificate.

Nello script seguente utilizzeremo proprio questo metodo per visualizzare sullo Stage tre cerchi di dimensioni differenti, introducendo altre due novità: il concetto di Shape, una sorta di oggetto contenitore simile al MovieClip ma adatto a contenere forme vettoriali, e drawCircle(), metodo che crea un cerchio accettando tre parametri (posizione x, posizione y e il raggio).

function doDrawCircle(x:Number, y:Number, radius:Number):void
{
var child:Shape = new Shape();
child.graphics.beginFill(0xFFCC00);
child.graphics.lineStyle(2, 0x000000);
child.graphics.drawCircle(x, y, radius);
child.graphics.endFill();
addChild(child);
}

displaylist_drawingapi.gif


Dall’immagine si nota immediatamente che l’ultimo cerchio creato appare sempre sopra il precedente, a dimostrazione della gestione automatica della profondità in Flash tramite la Display List.

Nel caso in cui fosse necessario cancellare un elemento dallo Stage sarà sufficiente utilizzare uno dei diversi metodi messi a disposizione dalla classe DisplayObjectContainer, tra i quali, ad esempio removeChildAt(indice posizione).

Per eliminare il primo elemento, ad esempio, potete utilizzare:

removeChildAt(0);

TrackBack

TrackBack URL per questo post:
http://blog.augitaly.com/mt-tb.cgi/324

Commenti (2)

tiTano:

Ciao,
i metodi addChild e removeChild delle DisplayList sembrano funzioni globali. ovvero non asiste apparentemente alcuna istanza di DisplayList che li chiama. Perche?

Ciao,
esattamente. Non serve( e non puoi ) creare alcuna istanza.

Ti ricopio una parte di reference tratta dalla guida di Flash CS3 / AS 3.0 che fa riferimento a questo discorso (soprattutto il secondo paragrafo):

" DisplayObject is an abstract base class; therefore, you cannot call DisplayObject directly. Invoking new DisplayObject() throws an ArgumentError exception.

The DisplayObjectContainer (NOTA: il metodo addChild appartiene a questa classe) class is an abstract base class for all objects that can contain child objects. It cannot be instantiated directly; calling the new DisplayObjectContainer() constructor throws an ArgumentError exception."

Affronteremo presto su un'altro dei nostri portali tutto il capitolo inerente la displayList in modo molto più approfondito. Sul blog non ci è possibile trattare in modo esaustivo l'argomento :)

Invia un commento

(If you haven't left a comment here before, you may need to be approved by the site owner before your comment will appear. Until then, it won't appear on the entry. Thanks for waiting.)