ActionScript 2.0/3.0 (Vergleich)

aus GlossarWiki, der Glossar-Datenbank der Fachhochschule Augsburg
Wechseln zu:Navigation, Suche
Dieser Artikel erfüllt die GlossarWiki-Qualitätsanforderungen:
  ★★★★★ Korrektheit: vollständig überprüft
  ★★★★★ Umfang: alle wesentlichen Fakten sind vorhanden
  ★★★★★ Quellenangaben: vollständig vorhanden
  ★★★☆☆ Quellenqualität: gut
  ★★★★☆ GlossarWiki-Konformität: sehr gut

1 Neuerungen in ActionScript 3.0

1.1 Datentypen

Der Datentyp Void (AS2) wurde in void (AS3) umbenannt.

Der Datentyp int wurde in AS3 neu eingeführt.

Der Datentyp uint (unsigned integer) wurde in AS3 neu eingeführt. Er kann nur positive Zahlen darstellen, besitzt jedoch auch 32 Bit und somit einen Zahlenbereich von 0 bis 2^32-1.

1.2 Schlüsselwörter

Die Schlüsselwörter is und as wurden in AS3 neu eingeführt. Sie sollen die Funktionalität des instanceof-Ausdrucks ersetzen und erweitern.

Der is-Ausdruck ist ein Boolescher Ausdruck und erwartet auf der linken Seite ein Objekt und auf der rechten eine Klasse. Falls das Objekt von der gegebenen Klasse abstammt (auch Basisklassen werden erkannt) wird true zurückgegeben, andernfalls false.

class A {}

class B extends A {}

class C extends A {}

a = new A();
b = new B();
c = new C();

trace(a is A); // true
trace(b is A); // true
trace(c is A); // true
trace(c is B); // false
trace(a is C); // false

Der is-Ausdruck funktioniert allerdings nicht für dynamische erzeugte Klassen mit den Prototype-Funktionen (wie zum Beispiel in AS1). Es wird nur die Klassenhierarchie durchsucht. Der instanceof-Ausdruck hingegen funktioniert in beiden Fällen, sollte allerdings nicht mehr verwendet werden.

Der as-Ausdruck bietet die gleiche Funktionalität wie is, jedoch ist das Ergebnis kein Boolean-Wert, sondern der Bezeichner der Klasse oder null.

class A {}

class B extends A {}

class C extends A {}

a = new A();
b = new B();
c = new C();

trace(a as A); // [object A]
trace(b as A); // [object B]
trace(c as A); // [object C]
trace(c as B); // null
trace(a as C); // null

1.3 Klassen

class XY { ... } (AS2)

package NAME(optional) {public class XY { ... }} (AS3)

Private Members können in AS2 via Hash-Array-Zugriff ausgelesen und modifiziert werden. In AS3 ist dies nicht mehr möglich.

AS3 unterscheidet zwischen private (Zugriff nur innerhalb der Klasse), protected (Zugriff innerhalb der Klasse sowie aller abgeleiteten Klassen), public (Zugriff aus jeder Klassen möglich) und internal (Zugriff innerhalb der Klasse sowie aller Klassen im selben Paket). AS2 dagegen unterscheidet nur zwischen private und public.

AS3 kennt keine abstrakten Funktionen, AS2 schon (var f: Function) (überprüfen!!!).

Flash-Submovies können in AS2/Flash 8 als private members deklariert werden, in AS3/Flash 9 müssen diese public sein!

1.4 Schleifen

Die for-each-Schleife wurde in AS3 neu eingeführt.

for (var i:int in ...): Zwei unterschiedliche For-Schleifen dürfen im Gegensatz zu AS2 nicht dieselbe Variablendeklaration enthalten.

1.5 Events

Events in AS3 sind in der Klasse EventDispatcher schon integriert, von der viele Klassen (z.B. DisplayObject und Timer) abgeleitet sind. Sie erben damit unter anderem folgende Methoden:

public function addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
public function removeEventListener(type:String, listener:Function, useCapture:Boolean = false):void

Mit myEventDispatcher.addEventListener("myEvent", eventHandler) werden alle Events vom Typ myEvent, die das Objekt myEventDispatcher wirft, abgefangen und zur Weiterverarbeitung an die Methode eventHandler(event:Event) geschickt. Diese Methode darf nur einen Parameter, der mindestens vom Typ Event sein muss, übergeben bekommen.

Mit myEventDispatcher.removeEventListener("myEvent") entfernt man den Listener des Objekts.

public function dispatchEvent(event:Event):Boolean

Mit dispatchEvent(new Event("myEvent",this)) wird ein Event vom Typ myEvent geworfen, das alle registrierten Listener zu ihren jeweiligen Objekten weiterreichen.

Wenn ein Event geworfen wird, arbeitet es sich zuerst von der stage (AS2: _root) bis zum werfenden Objekt (target) durch und dann wieder zur Stage zurück. Dieser Vorgang wird in drei Phasen beschrieben: capture phase, target phase, bubble phase.

2 Quellen

  1. Adobe Labs: ActionScript 3
  2. Migration ActionScript 2.0 -> ActionScript 3.0
  3. Migrating to ActionScript 3
  4. Adobe Flex 4.5: Flex Documentation
  5. Eigene Versuche durch W. Kowarschick