Einführung in ActionScript 3.0

Informationen zu ActionScript

ActionScript ist die Programmiersprache für die Laufzeitumgebungen Adobe® Flash® Player und Adobe® AIR™. Mit dieser Programmiersprache kann in Flash-, Flex- und AIR-Inhalten und -Anwendungen Interaktivität, die Verarbeitung von Daten und vieles andere mehr realisiert werden.

ActionScript-Anweisungen werden von der ActionScript Virtual Machine (AVM) ausgeführt, die Bestandteil von Flash Player und AIR ist. ActionScript-Code wird normalerweise von einem Compiler in das Bytecode-Format umgewandelt. ( Bytecode ist eine Programmiersprache, die von Computern geschrieben und interpretiert werden kann.) Beispiele für Compiler sind der in Adobe® Flash® Professional integrierte Compiler sowie der Compiler, der in Adobe® Flash® Builder™ integriert ist und im Adobe® Flex™ SDK zur Verfügung steht. Der Bytecode ist in SWF-Dateien eingebettet, die von Flash Player und AIR ausgeführt werden.

ActionScript 3.0 stellt ein robustes Programmiermodell dar, das Entwicklern mit Grundkenntnissen der objektorientierten Programmierung sofort vertraut ist. Zu den wichtigsten Verbesserungen in ActionScript 3.0 im Vergleich mit früheren ActionScript-Versionen zählen:

  • Eine neue ActionScript Virtual Machine (mit der Bezeichnung AVM2), die einen neuen Bytecode-Befehlssatz verwendet und deutliche Leistungsverbesserungen bietet.

  • Eine modernere Compiler-Codebase, die tief greifendere Optimierungen als frühere Compiler-Versionen vornimmt.

  • Eine erweiterte und verbesserte Anwendungsprogrammierschnittstelle (API, Application Programming Interface) mit Objektzugriff auf elementarster Ebene und einem rein objektorientierten Modell.

  • Eine XML-API, die auf der E4X-Spezifikation (ECMAScript for XML, ECMA-357 Version 2) beruht. E4X ist eine Spracherweiterung für ECMAScript, mit der XML als nativer Datentyp der Sprache hinzugefügt wird.

  • Ein Ereignismodell, das auf der DOM3-Ereignisspezifikation (Document Object Model Level 3) beruht.

Vorzüge von ActionScript 3.0

Die Scripting-Möglichkeiten von ActionScript 3.0 gehen weit über die vorheriger ActionScript-Versionen hinaus. ActionScript 3.0 wurde mit dem Ziel entwickelt, das Erstellen hochkomplexer Anwendungen mit umfangreichen Datensätzen und einer objektorientierten, wiederverwendbaren Codebasis zu ermöglichen. ActionScript 3.0 ist nicht für Inhalt erforderlich, der in Adobe Flash Player ausgeführt wird. Es ermöglicht jedoch Leistungssteigerungen, die nur mit AVM2 (ActionScript 3.0 Virtual Machine) erreicht werden können. ActionScript 3.0-Code kann bis zu zehn Mal schneller ausgeführt werden als älterer ActionScript-Code.

Mit der vorigen Version der ActionScript Virtual Machine, AVM1, wird ActionScript 1.0- und ActionScript 2.0-Code ausgeführt. Flash Player 9 und 10 unterstützen AVM1, um die Abwärtskompatibilität zu gewährleisten.

Was ist neu in ActionScript 3.0

ActionScript 3.0 enthält zahlreiche Klassen und Funktionen, die ActionScript 1.0 und 2.0 ähneln. Dennoch unterscheidet ActionScript 3.0 sich in seiner Architektur und auch konzeptionell von den älteren ActionScript-Versionen. Zu den Verbesserungen in ActionScript 3.0 zählen neue Funktionen der Kernsprache und eine verbesserte API, die eine umfangreichere Steuerung elementarer Objekte ermöglicht.

Funktionsumfang der Kernsprache

Die Kernsprache definiert die elementaren Baublöcke der Programmiersprache, z. B. Anweisungen, Ausdrücke, Bedingungen, Schleifen und Datentypen. ActionScript 3.0 enthält viele Funktionen, die den Entwicklungsprozess beschleunigen.

Ausnahmen zur Laufzeit

ActionScript 3.0 meldet mehr Fehlerzustände als vorherige ActionScript-Versionen. Für allgemeine Fehler kommen Laufzeitausnahmen zur Anwendung. Dies vereinfacht das Debuggen und ermöglicht Ihnen das Entwickeln von Anwendungen mit einer robusten Fehlerverarbeitung. Laufzeitfehler können Stack-Traces bereitstellen, die den Namen der Quellcodedatei und die Zeilennummer enthalten. Dies vereinfacht das Lokalisieren von Fehlerquellen.

Datentypisierung zur Laufzeit

In ActionScript 3.0 werden Typinformationen zur Laufzeit beibehalten. Diese Informationen werden verwendet, um zur Laufzeit Typüberprüfungen durchzuführen und die Typgenauigkeit des Systems zu erhöhen. Typangaben werden auch verwendet, um Variablen im nativen Prozessorformat abzubilden. Dies erhöht die Systemleistung und verringert den Speicherbedarf. Im Gegensatz dazu dienen Typanmerkungen in ActionScript 2.0 hauptsächlich als Hilfe bei der Entwicklung; alle Werte werden zur Laufzeit dynamisch typisiert.

Versiegelte Klassen

ActionScript 3.0 umfasst das Konzept der versiegelten Klassen. Eine versiegelte Klasse verfügt nur über den festen Satz an Eigenschaften und Methoden, die zur Kompilierzeit definiert werden. Es können keine weiteren Eigenschaften und Methoden hinzugefügt werden. Da Klassen nicht zur Laufzeit geändert werden können, ist eine striktere Prüfung zur Kompilierzeit möglich, wodurch robustere Programme entstehen. Außerdem wird die Speicherauslastung verbessert, da nun nicht mehr für jede Objektinstanz eine interne Hash-Tabelle erforderlich ist. Mithilfe des Schlüsselworts dynamic sind auch dynamische Klassen möglich. Alle Klassen in ActionScript 3.0 sind standardmäßig versiegelt, können jedoch mit dem Schlüsselwort dynamic als dynamische Klasse deklariert werden.

Methodenhüllen

ActionScript 3.0 ermöglicht es, bei Methodenhüllen automatisch die ursprüngliche Objektinstanz zu speichern. Diese Funktion ist bei der Ereignisverarbeitung nützlich. In ActionScript 2.0 wird bei Methodenhüllen nicht gespeichert, von welcher Objektinstanz sie jeweils abgeleitet wurden. Dies führt zu unerwartetem Verhalten beim Aufrufen der Methodenhüllen.

E4X (ECMAScript for XML)

ActionScript 3.0 implementiert die E4X-Spezifikation (ECMAScript for XML), die unlängst als ECMA-357 standardisiert wurde. E4X bietet einen natürlichen, leicht einsetzbaren Satz von Sprachkonstrukten zum Bearbeiten von XML. Im Gegensatz zu herkömmlichen XML-Parsing-APIs wird XML mit E4X hinsichtlich der Verarbeitungsgeschwindigkeit wie ein nativer Datentyp der Programmiersprache behandelt. E4X beschleunigt das Entwickeln von Anwendungen, die XML-Daten bearbeiten, indem der Umfang des dazu erforderlichen Programmcodes auf einen Bruchteil reduziert wird.

Die ECMA E4X-Spezifikation kann unter www.ecma-international.org nachgelesen werden.

Reguläre Ausdrücke

ActionScript 3.0 enthält native Unterstützung für reguläre Ausdrücke. Strings können so schnell gesucht und bearbeitet werden. ActionScript 3.0 implementiert Unterstützung für reguläre Ausdrücke entsprechend der Sprachspezifikation ECMAScript Version 3 (ECMA-262).

Namespaces

Namespaces ähneln den herkömmlichen Zugriffsbezeichnern, die zur Steuerung der Sichtbarkeit von Deklarationen eingesetzt werden ( public , private , protected ). Sie werden als benutzerdefinierte Zugriffsbezeichner mit frei wählbaren Namen verwendet. Namespaces sind mit einem URI (Universal Resource Identifier) ausgestattet, um Kollisionen zu vermeiden. Wenn Sie E4X einsetzen, werden sie auch zur Abbildung von XML-Namespaces verwendet.

Neue Grunddatentypen

ActionScript 3.0 enthält drei numerische Datentypen: „Number“, „int“ und „uint“. Der Datentyp „Number“ steht für eine Gleitkommazahl mit doppelter Genauigkeit. Der Datentyp „int“ ist eine vorzeichenbehaftete 32-Bit-Ganzzahl, mit der die Vorteile der schnellen Ganzzahlenarithmetik der CPU im ActionScript-Programmcode genutzt werden können. Der Datentyp „int“ eignet sich für Schleifenzähler und Variablen, bei denen Ganzzahlen verwendet werden. Beim Datentyp „uint“ handelt es sich um eine vorzeichenlose 32-Bit-Ganzzahl, die sich gut für RGB-Farbwerte, Bytezähler usw. eignet. In Gegensatz dazu verfügt ActionScript 2.0 nur über einen numerischen Datentyp, nämlich „Number“.

API-Funktionen

Die APIs in ActionScript 3.0 enthalten viele Klassen, mit denen Objekte auf elementarer Ebene gesteuert werden können. Die Sprache kann nun mit einer intuitiveren Architektur als in früheren Versionen aufwarten. Eine detaillierte Beschreibung aller Klassen würde den Rahmen dieser Dokumentation sprengen, doch einige wichtige Unterschiede sollen hier hervorgehoben werden.

DOM3-Ereignismodell

Das DOM3-Ereignismodell (Document Object Model Level 3) bietet eine Standardmethode zum Generieren und Verarbeiten von Ereignismeldungen. Dieses Ereignismodell soll die Interaktion und Kommunikation zwischen Objekten innerhalb von Anwendungen zulassen. Außerdem ermöglicht es Objekten, ihren Status beizubehalten und auf Änderungen zu reagieren. Das ActionScript 3.0-Ereignismodell basiert auf der Ereignisspezifikation nach World Wide Web Consortium DOM Level 3. Dieses Modell bietet einen übersichtlicheren und effizienteren Mechanismus als die Ereignissysteme in früheren ActionScript-Versionen.

Ereignisse und Fehlerereignisse befinden sich im flash.events-Paket. Die Flash Professional-Komponenten und die Flex-Umgebung nutzen dasselbe Ereignismodell, wodurch das Ereignissystem für die ganze Flash-Plattform einheitlich gestaltet ist.

Anzeigelisten-API

Die API für den Zugriff auf die Anzeigeliste – die Baumstruktur, die alle visuellen Elemente einer Anwendung enthält – besteht aus Klassen für den Einsatz visueller Grundtypen.

Die Sprite-Klasse ist ein schlanker Baustein, der als Basisklasse für visuelle Elemente vorgesehen ist, wie beispielsweise Komponenten der Benutzeroberfläche. Die Shape-Klasse repräsentiert unformatierte Vektorformen. Diese Klassen können wie gewohnt mit dem new -Operator instanziiert und jederzeit auch wieder dynamisch als übergeordnet deklariert werden.

Die Verwaltung der Tiefe erfolgt automatisch. Zum Festlegen und Verwalten der Stapelreihenfolge von Objekten sind Methoden verfügbar.

Verarbeitung dynamischer Daten und Inhalte

ActionScript 3.0 enthält intuitive und über die gesamte API konsistente Mechanismen zum Laden und Verarbeiten von Ressourcen und Daten in Anwendungen. Die Loader-Klasse stellt einen einheitlichen Mechanismus zum Laden von SWF-Dateien und Bildelementen bereit und bietet eine Möglichkeit, auf detaillierte Informationen der geladenen Inhalte zuzugreifen. Die URLLoader-Klasse stellt einen eigenen Mechanismus zum Laden von Text- und Binärdaten in datengesteuerten Anwendungen bereit. Mit der Socket-Klasse können Binärdaten in beliebigen Formaten von Server-Sockets gelesen oder in diese geschrieben werden.

Datenzugriff auf elementarer Ebene

Verschiedene APIs ermöglichen den Datenzugriff auf elementarer Ebene. Bei Daten, die heruntergeladen werden, ermöglicht die URLStream-Klasse noch während des Downloads den Zugriff auf die Daten als unformatierte Binärdaten. Mithilfe der ByteArray-Klasse können Sie die Lese- und Schreibvorgänge für Binärdaten sowie deren Verarbeitung optimieren. Die Sound-API ermöglicht die exakte Audiosteuerung mithilfe der SoundChannel- und SoundMixer-Klassen. Sicherheitsbezogene APIs stellen Informationen zu den Sicherheitsberechtigungen von SWF-Dateien und geladenen Inhalten bereit. So können durch Sicherheitsverletzungen hervorgerufene Fehler verarbeitet werden.

Arbeiten mit Text

ActionScript 3.0 enthält ein flash.text-Paket für alle textbezogenen APIs. Die TextLineMetrics-Klasse stellt detaillierte Metrikdaten für eine Textzeile in einem Textfeld bereit; sie ersetzt die TextFormat.getTextExtent() -Methode aus ActionScript 2.0. Die TextField-Klasse enthält elementare Methoden, die spezifische Informationen über eine Textzeile oder ein einzelnes Zeichen in einem Textfeld liefern. Beispielsweise gibt die getCharBoundaries() -Methode ein Rechteck zurück, das den Begrenzungsrahmen eines Zeichens darstellt. Die getCharIndexAtPoint() -Methode gibt den Index des Zeichens an einem bestimmten Punkt zurück. Die getFirstCharInParagraph() -Methode gibt den Index des ersten Zeichens in einem Absatz zurück. Zu den Methoden auf Zeilenebene zählen beispielsweise getLineLength() (gibt die Anzahl der Zeichen der angegebenen Textzeile zurück) und getLineText() (gibt den Text der angegebenen Zeile zurück). Die Font-Klasse bietet die Möglichkeit, in SWF-Dateien eingebettete Schriftarten zu verwalten.

Die Klassen im flash.text.engine-Paket bilden das Flash-Textmodul (Flash Text Engine) und ermöglichen die Textsteuerung auf noch elementarer Ebene. Diese Klassen ermöglichen die elementare Textsteuerung und sind für die Erstellung von Textstrukturen und Textkomponenten vorgesehen.