In ActionScript 3.0 gibt es separate Klassen für die verschiedenen Anzeigeobjektarten. In ActionScript 1.0 und 2.0 waren viele dieser Objektarten in einer Klasse zusammengefasst: der MovieClip-Klasse.
Die Individualisierung von Klassen und die hierarchische Struktur von Anzeigelisten bieten zahlreiche Vorteile:
-
Effizientere Darstellung und kleinere Dateien
-
Verbesserte Tiefenverwaltung
-
Vollständiges Durchlaufen der Anzeigeliste
-
Anzeigeobjekte außerhalb der Liste
-
Einfacheres Klassifizieren von Anzeigeobjekten in Untergruppen
Effizientere Darstellung und kleinere Dateien
In ActionScript 1.0 und 2.0 konnten Sie Formen nur in einem MovieClip-Objekt zeichnen. In ActionScript 3.0 gibt es einfachere Anzeigeobjektklassen, in denen Sie Formen zeichnen können. Da diese ActionScript 3.0-Anzeigeobjektklassen keinen vollständigen Satz an Methoden und Eigenschaften wie ein MovieClip-Objekt enthalten, belegen sie weniger Speicher- und Prozessorressourcen.
Beispielsweise enthält jedes MovieClip-Objekt Eigenschaften für die Zeitleiste des Movieclips, ein Shape-Objekt jedoch nicht. Die Eigenschaften zur Verwaltung der Zeitleiste können einen Großteil der Speicher- und Prozessorressourcen belegen. In ActionScript 3.0 wird durch das Verwenden des Shape-Objekts eine bessere Performance erreicht. Das Shape-Objekt belastet den Speicher geringer als das komplexere MovieClip-Objekt. Flash Player und AIR müssen keine nicht verwendeten MovieClip-Eigenschaften verwalten. Dies erhöht die Geschwindigkeit und reduziert den Speicherbedarf des Objekts.
Verbesserte Tiefenverwaltung
In ActionScript 1.0 und 2.0 wurde die Tiefe über ein lineares Tiefenverwaltungsschema und Methoden wie z. B.
getNextHighestDepth()
verwaltet.
ActionScript 3.0 enthält die DisplayObjectContainer-Klasse, die einfacher anzuwendende Methoden und Eigenschaften zur Verwaltung der Anzeigeobjekttiefe bietet.
Wenn Sie in ActionScript 3.0 ein Anzeigeobjekt an eine neue Position in der Child-Liste einer DisplayObjectContainer-Instanz verschieben, werden die anderen Elemente der Child-Liste automatisch neu positioniert und erhalten entsprechende Child-Index-Positionen im Anzeigeobjektcontainer.
Darüber hinaus ist es in ActionScript 3.0 immer möglich, alle untergeordneten Objekte eines Anzeigeobjektcontainers zu erkennen. Jede DisplayObjectContainer-Instanz hat eine
numChildren
-Eigenschaft, in der die Anzahl der untergeordneten Elemente im Anzeigeobjektcontainer aufgeführt ist. Da die Child-Liste eines Anzeigeobjektcontainers immer eine Indexliste ist, können Sie jedes Objekt in der Liste von der ersten (0) bis zur letzten Indexposition (
numChildren - 1
) untersuchen. Dies war mit den Methoden und Eigenschaften eines MovieClip-Objekts in ActionScript 1.0 und 2.0 nicht möglich.
In ActionScript 3.0 können Sie die Anzeigeliste bequem sequenziell durchlaufen; es gibt keine Lücken bei den Indexpositionszahlen der Child-Liste eines Anzeigeobjektcontainers. Das Durchlaufen der Anzeigeliste und Verwalten der Objekttiefe ist viel einfacher als in ActionScript 1.0 und 2.0. In ActionScript 1.0 und 2.0 konnte ein Movieclip Objekte mit Lücken in der Tiefenebene enthalten, wodurch das Durchlaufen der Objektliste kompliziert wurde. In ActionScript 3.0 wird jede Child-Liste eines Anzeigeobjektcontainers intern als Array zwischengespeichert. Dadurch ist sehr schnelles Nachschlagen (über den Index) möglich. Auch das Durchlaufen alle untergeordneten Elemente eines Anzeigeobjektcontainers erfolgt sehr schnell.
In ActionScript 3.0 können Sie auch mit der
getChildByName()
-Methode der DisplayObjectContainer-Klasse auf die untergeordneten Elemente eines Anzeigeobjektcontainers zugreifen.
Vollständiges Durchlaufen der Anzeigeliste
In ActionScript 1.0 und 2.0 konnten Sie auf einige Objekte, wie z. B. in der Flash-Authoring-Umgebung gezeichnete Vektorformen, nicht zugreifen. In ActionScript 3.0 können Sie auf alle Objekte in der Anzeigeliste zugreifen, unabhängig davon, ob diese mit ActionScript oder in der Flash-Authoring-Umgebung erstellt wurden. Nähere Einzelheiten finden Sie unter
Durchlaufen der Anzeigeliste
.
Anzeigeobjekte außerhalb der Liste
In ActionScript 3.0 können Sie Anzeigeobjekte erstellen, die nicht in der sichtbaren Anzeigeliste erscheinen. Diese Objekte werden als
Offlist
-Anzeigeobjekte (außerhalb der Liste) bezeichnet. Ein Anzeigeobjekt wird nur dann der sichtbaren Anzeigeliste hinzugefügt, wenn Sie die
addChild()
- oder
addChildAt()
-Methode einer DisplayObjectContainer-Instanz aufrufen, die der Anzeigeliste bereits hinzugefügt wurde.
Mit diesen Offlist-Anzeigeobjekten können Sie komplexe Anzeigeobjekte zusammensetzen, beispielsweise Anzeigeobjekte mit mehreren Anzeigeobjektcontainern, die wiederum mehrere Anzeigeobjekte enthalten. Mit Offlist-Anzeigeobjekten können Sie komplizierte Objekte zusammensetzen, ohne Verarbeitungszeit zur Darstellung dieser Anzeigeobjekte aufzuwenden. Sie können ein Offlist-Anzeigeobjekt dann bei Bedarf einer Anzeigeliste hinzufügen. Außerdem können Sie ein untergeordnetes Element eines Anzeigeobjektcontainers zu einer Anzeigeliste hinzufügen oder daraus entfernen und an jede Position in der Anzeigeliste verschieben.
Einfacheres Klassifizieren von Anzeigeobjekten in Untergruppen
In ActionScript 1.0 und 2.0 mussten Sie neue MovieClip-Objekte in der Regel einer SWF-Datei hinzufügen, um grundlegende Formen zu erstellen oder Bitmaps anzuzeigen. In ActionScript 3.0 enthält die DisplayObject-Klasse viele integrierte Unterklassen, so z. B. „Shape“ und „Bitmap“. Da die Klassen in ActionScript 3.0 speziell für bestimmte Objekttypen entwickelt wurden, ist es einfacher, grundlegende Unterklassen der integrierten Klassen zu erstellen.
Um in ActionScript 2.0 einen Kreis zu zeichnen, können Sie eine CustomCircle-Klasse erstellen, welche die MovieClip-Klasse erweitert, wenn ein Objekt der benutzerdefinierten Klasse instanziiert wird. Jedoch würde diese Klasse zahlreiche Eigenschaften und Methoden von der MovieClip-Klasse übernehmen (beispielsweise
totalFrames
), die für diese Klasse nicht gelten. In ActionScript 3.0 erstellen Sie einfach eine CustomCircle-Klasse, die das Shape-Objekt erweitert und somit keine unnötigen Eigenschaften und Methoden übernimmt, die in der MovieClip-Klasse enthalten sind. Der folgende Code zeigt ein Beispiel einer CustomCircle-Klasse:
import flash.display.*;
public class CustomCircle extends Shape
{
var xPos:Number;
var yPos:Number;
var radius:Number;
var color:uint;
public function CustomCircle(xInput:Number,
yInput:Number,
rInput:Number,
colorInput:uint)
{
xPos = xInput;
yPos = yInput;
radius = rInput;
color = colorInput;
this.graphics.beginFill(color);
this.graphics.drawCircle(xPos, yPos, radius);
}
}
|
|
|