06/02/2008 - 16:12
Introductie van de Display API in Adobe Flash actionscript 3. Sinds as3 gaat het weergeven van je grafische objecten anders dan je voorheen gewend was. In dit artikel een kort overzicht van de verschillende Display object classes en de vereiste Display List.

Intro Display API en Display List in Flash Actionscript 3

Intro Display API en Display List in Flash Actionscript 3

Intro

Sinds ActionScript 3 is er de DisplayObject. Waar in Actionscript 2 de MovieClip de basis van je Applicatie was met daarin weer nieuwe MovieClips als childs, is het renderen in Flash nu drastisch omgegooid. Elke Movie bevat enkel 1 Display List. In de Display List vind je 3 types elementen:

  • de stage
    De stage is de root van de Display list hierarchie. Elke movie heeft een enkele stage object waarin de hele object hierarchie zit van alles wat er in beeld getoont moet worden. Je hebt toegang tot de stage vanaf elk Display Object in de Display list.
  • Display objecten
    De weergave in beeld word verzorgt door Display Objecten. Een TextField is bijvoorbeeld een Display object.
  • Display object containers
    De stage evenals MovieClip, Shape en ook de Sprite zijn zogeheten Display object containers. In een Display object container kan je Display objecten of andere Display object containers kwijt. Sommige Classes hebben een multi functie. Zo kan bijvoorbeeld de MovieClip zowel Display object container als een Display object zijn.

Display API

De display API is ingebouwt in de Flash player. Daardoor is deze API in elk .swf bestand beschikbaar. Alle grafische content in Flash actionscript 3 wordt gemaakt door gebruik te maken van de display API classes. De meeste display API classes kan je terugvinden in de flash.display.* package.
In het plaatje boven, zie je de hierarchie van de core display Classes. Onder te verdelen in 3 'abstracte' classes: DisplayObject, DisplayObjectContainer en de InteractiveObject (welke overigens niet rechtstreeks te initialiseren zijn).

DisplayObject class

Om wat in beeld te tonen dien je minimaal te erven van de DisplayObject. De meest basic class onder de Display objecten.

Als je class erft van de DisplayObject, heb je standaard een set met grafische opties zoals roteren, positioneren, schalen.
DisplayObject instances hebben standaard functionaliteit voor het converteren van locale naar globale waarden (en vice versa), schalen met gebruik van scale9grid, toekennen van filters en checken van intersectie tussen de objecten en points (x,y).

De concrete subclasses van de DisplayObject zijn o.a. de Bitmap en de StaticText (zie plaatje). We hebben het over de simpelste vorm van grafische display objecten hier. Er is geen functionaliteit aanwezig voor interactiviteit en de objecten kunnen ook geen andere objecten bevatten.

InteractiveObject class

De InterActiveObject erft van de DisplayObject en net als de DisplayObject een soort van Abstract class. Nu bestaan er geen abstracte classes in Flash dus is abstract 'een beetje relatief' en meer in stijl gesproken dan in werkelijk abstract.

Met de Interactive class creer je extra functionaliteit voor , je raad het al, interactiviteit. Door je class te laten erven van de InteractiveObject class creer je muis en keyboard functionaliteit.

Nu zijn er verschillende soorten interactieve objecten welke verschillende functionaliteit meenemen. De TextField bijvoorbeeld, geeft je functionaliteit voor weergave van geformateerde tekst, voor input van de eindgebruiker en voor focus (in en uit).
De SimpleButton geeft je functionaliteit voor bijvoorbeeld MouseEvent.CLICK oftewel een muis klik.

DisplayObjectContainer class

Om in je applicaties mogelijkheden te hebben om andere objecten aan je display object toe te voegen, laat je de classes erven van de DisplayObjectContainer class. Door dit te doen, kan je class elke andere DisplayObject bevatten en kan je groepen maken met Display objecten die je allemaal in 1 keer wilt aanspreken of aanpassen.

Wanneer je een container schaalt of verplaatst gaan alle display objecten die erin zitten mee.
Wanneer je een container uit beeld haalt gaan tevens alle child display objecten uit beeld.

Je kunt in een DisplayObjectContainer ook weer andere display containers gebruiken om je applicatie binnen een DisplayObjectContainer verder te structureren.

Sprite
In Actionscript 3/ Flash 9 gebruik je meer en meer Sprites in plaats van de uit eerdere Flashversies bekende MovieClip. De Sprite erft zowel de container als de interactiviteit functionaliteit van de InteractiveObject en de DisplayContainer.

De de Sprite is uitermate geschikt voor het meeste werk, zeker wanneer je het grafisch van de grond af opbouwt. De taak van een MovieClip word meer timeline animatie en dat soort dingen.

Het is aan ons, Flash developers, de verschillende display object classes uit te breiden en te verlengen voor gebruik in eigen applicaties.

De Display List

Om de verschillende grafische ook daadwerkelijk te tonen hebben we de Display List. Je applicatie heeft altijd maar 1 Display List. Aan de Display List voeg je de objecten toe die je in beeld wilt vertonen.

Note: Uiteraard dienen de objecten die je aan de display list toevoegt te erven van 1 van de 3 Display Object 'abstracte' classes.

Als er een display object aan de display list wordt toegevoegd, word die gerenderd voor weergave en krijg je die in beeld te zien (ervan uitgaande dat die zich in het visuele deel van de swf bevind).

De display list is een hierarchie van alle, op dat moment in beeld vertoonde, grafische objecten.

de Stage

De root van je display list is altijd een instance van de Stage class. Deze word automatisch gemaakt als de flash runtime start.

De Stage instance is de container voor alle grafische objecten in je display list (vandaar root van ..). De Stage zorgt tevens voor functionaliteit om je globale instellingen, van je totale beeld, te doen. Bijvoorbeeld de 'quality' de 'scaleMode' waarmee je voor de hele applicatie instelt hoe de kwaliteit of schaalbaarheid, van alle grafische objecten in je display list, moet worden.

Je kunt de Stage instance altijd benaderen op relatieve manier via de objecten in je display list. Een voorbeeld: Stel, de display list bevat een sprite instance genaamd 'deSprite'. Je kan dan de Stage instance benaderen door:
deSprite.stage

Tot zover een introductie van de Display Object en Display list in Flash Actionscript 3.
Op en aanmerkingen en ekudo's zijn altijd welkom.

Mooie introductie hoor! Ik

Mooie introductie hoor! Ik geloof zelfs dat ik die afbeelding zal opslaan om een overzicht bij te houden. bedankt

Beste, Allereerst bedankt

Beste,

Allereerst bedankt voor je uitleg. Ik ben echter nog redelijk nieuw in Flash en heb een concrete vraag

Ik tracht een AS3 guestbook applicatie (flepstudio simple guestbook) in te bouwen op mijn flash site. Ik roep daarvoor de class aan in de doc properties 'org.flepstudio.main' Als ik de elementen van de applicatie op de eerste frame zet werkt de applicatie.
Ik wil de guestbook echter pas tonen vanaf frame 61. Ik krijg dan bij het compilen de volgende error :

TypeError: Error #1009: Kan geen eigenschap of methode benaderen via een verwijzing naar een object dat null is.
at org.FlepStudio::Main/init()

Hoe kan ik de class initiëren zonder dat de elementen op frame 1 moeten worden geplaatst ?

Alvast bedankt voor je reactie !

Hallo Pat, Dank voor je

Hallo Pat,

Dank voor je reactie, wil je zo vriendelijk zijn je vraag in het forum te stellen, dan kan ik er op ingaan op de juiste plek. Deze plek is gereserveerd voor reacties aangaande het artikel zelf ;)

Bij voorbaat dank,