ActionScript



ActionScript ist eine objektorientierte Programmiersprache , die ursprünglich von Macromedia Inc. entwickelt wurde (später von Adobe Systems erworben ). Es ist eine Ableitung von HyperTalk , die Skriptsprache für HyperCard . [2] Es ist jetzt ein Dialekt von ECMAScript (dh es ist ein Superset der Syntax und Semantik der Sprache, die weithin als JavaScript bekannt ist ), obwohl es ursprünglich als Geschwister entstanden, die beide von HyperTalk beeinflusst wurden.

ActionScript wird hauptsächlich für die Entwicklung von Webseiten und Software verwendet, die auf die Adobe Flash Player- Plattform ausgerichtet sind und auf Webseiten in Form von eingebetteten SWF-Dateien verwendet werden.

ActionScript 3 wird auch mit dem Adobe AIR System für die Entwicklung von Desktop- und mobilen Anwendungen eingesetzt. Die Sprache selbst ist Open-Source, da ihre Spezifikation kostenlos angeboten wird [3] und sowohl ein Open-Source-Compiler (als Teil von Apache Flex ) und Open Source Virtual Machine ( Mozilla Tamarin ) zur Verfügung stehen.

ActionScript wird auch mit Scaleform GFx für die Entwicklung von 3D-Videospiel-Benutzeroberflächen und HUDs verwendet .

Übersicht

ActionScript wurde ursprünglich für die Steuerung einfacher 2D-Vektor-Animationen in Adobe Flash (früher Macromedia Flash) entwickelt. Zunächst konzentrierte er sich auf die Animation, frühe Versionen von Flash-Inhalten boten nur wenige Interaktivitätsmerkmale und hatten daher eine sehr begrenzte Skriptfähigkeit. Spätere Versionen fügten Funktionalität hinzu, die die Erstellung von Web-basierten Spielen und Rich Internet-Anwendungen mit Streaming-Medien (wie Video und Audio) ermöglicht. Heute eignet sich ActionScript für die mobile Entwicklung durch Adobe AIR , die Verwendung in einigen Datenbankanwendungen und in der Basis-Robotik wie beim Make Controller Kit .

Flash MX 2004 hat ActionScript 2.0 eingeführt, eine Skriptsprache, die mehr für die Entwicklung von Flash-Anwendungen geeignet ist. Es ist oft möglich, Zeit zu sparen, indem man etwas kennt, anstatt es zu animieren, was in der Regel auch eine höhere Flexibilität bei der Bearbeitung ermöglicht.

Seit dem Eintreffen des Flash Player 9 alpha (2006) wurde eine neuere Version von ActionScript veröffentlicht, ActionScript 3.0. Diese Version der Sprache soll kompiliert und auf einer Version der ActionScript Virtual Machine ausgeführt werden , die selbst komplett von Grund auf neu geschrieben wurde (synchronisiert AVM2). [4] Aus diesem Grund ist Code, der in ActionScript 3.0 geschrieben wird, generell für Flash Player 9 und höher gezielt und wird in früheren Versionen nicht funktionieren. Zur gleichen Zeit führt ActionScript 3.0 bis zu 10-mal schneller als Legacy-ActionScript-Code aufgrund der Just-In-Time-Compiler- Erweiterungen aus. [5]

Flash-Bibliotheken können mit den XML-Funktionen des Browsers verwendet werden, um Rich-Inhalte im Browser zu rendern. Diese Technologie ist bekannt als Asynchronous Flash und XML, ähnlich wie AJAX . Adobe bietet seine Flex- Produktlinie an, um die Nachfrage nach Rich Internet Applications zu erfüllen, die auf der Flash-Laufzeit aufgebaut sind, mit Verhaltensweisen und Programmierung in ActionScript. ActionScript 3.0 bildet die Grundlage der Flex 2 API.

Geschichte

ActionScript wurde als objektorientierte Sprache für das Flash-Authoring-Tool von Macromedia gestartet , das nun von Adobe Systems als Adobe Flash entwickelt wurde . Die ersten drei Versionen des Flash-Authoring-Tools lieferten begrenzte Interaktivitätsfunktionen. Early Flash-Entwickler könnten einen einfachen Befehl, eine „Aktion“, eine Schaltfläche oder einen Rahmen anhängen. Der Satz von Aktionen war grundlegende Navigation Kontrollen, mit Befehlen wie „spielen“, „Stop“, „getURL“ und „gotoAndPlay“.

Mit der Veröffentlichung von Flash 4 im Jahr 1999 wurde dieser einfache Satz von Aktionen zu einer kleinen Skriptsprache . Neue Funktionen, die für Flash 4 eingeführt wurden, enthalten Variablen , Ausdrücke , Operatoren , falls Anweisungen und Loops . Obwohl sie intern als „ActionScript“ bezeichnet wurden, benutzte das Flash 4 Benutzerhandbuch und die Marketingdokumente weiterhin den Begriff „Aktionen“, um diesen Satz von Befehlen zu beschreiben.

Timeline nach Spielerversion

  • Flash Player 2 : Die erste Version mit Scripting-Unterstützung. Die Aktionen beinhalten gotoAndPlay, gotoAndStop, nextFrame und nextScene für die Zeitleistensteuerung.
  • Flash Player 3 : Erweiterter Basis-Scripting-Support mit der Möglichkeit, externe SWFs (loadMovie) zu laden .
  • Flash Player 4 : Erster Spieler mit einer vollständigen Scripting-Implementierung (genannt Aktionen ). Das Scripting war eine Flash-basierte Syntax und enthielt Unterstützung für Loops, Conditionals, Variablen und andere grundlegende Sprachkonstrukte.
  • Flash Player 5 : Inbegriffen die erste Version von ActionScript. Gebrauchte Prototyp-basierte Programmierung auf Basis von ECMAScript, [6] und erlaubte die volle prozedurale Programmierung und objektorientierte Programmierung . Designbasierte Entwicklung.
  • Flash Player 6 : Hinzufügen eines Event-Handling-Modells, Zugänglichkeitskontrollen und Unterstützung für Switch . Die erste Version mit Unterstützung für die AMF und RTMP Protokolle, die auf Anfrage Audio / Video-Streaming erlaubt.
  • Flash Player 7 : Zusätze enthalten CSS Styling für Text und Unterstützung für Actionscript 2.0, eine Programmiersprache basiert auf dem ECMAScript 4 Netscape Vorschlag [7] mit Klasse basierenden Vererbung . Allerdings kann ActionScript 2.0 kompilieren mit ActionScript 1.0 Byte-Code , so dass es in Flash Player 6 laufen kann.
  • Flash Player 8 : Weiterer erweiterter ActionScript 1 / ActionScript 2 durch Hinzufügen neuer Klassenbibliotheken mit APIs zur Steuerung von Bitmap-Daten zur Laufzeit, Datei-Uploads und Live-Filtern für Unschärfe und dropshadow.
  • Flash Player 9 (ursprünglich 8.5) : Added ActionScript 3.0 mit dem Aufkommen einer neuen virtuellen Maschine namens ActionScript Virtual Machine 2 (AVM2), die mit dem vorherigen AVM1 koexistiert, um ältere Inhalte zu unterstützen. Leistungssteigerungen waren ein wichtiges Ziel für diese Freigabe des Spielers einschließlich eines neuen JIT- Compilers. Unterstützung für binäre Sockets, E4X XML-Parsing, Vollbildmodus und Regular Expressions wurden hinzugefügt. Dies ist die erste Version des Spielers mit dem Titel Adobe Flash Player. [8]
  • Flash Player 10 (ursprünglich Astro genannt) : Eine grundlegende 3D- Manipulation hinzugefügt , wie zB das Drehen auf der X-, Y- und Z- Achse , eine 3D-Zeichnungs-API und die Texturabbildung . Möglichkeit, benutzerdefinierte Filter mit Adobe Pixel Bender zu erstellen . Mehrere visuelle Verarbeitungsaufgaben werden nun in die GPU geladen, was eine spürbare Abnahme der Renderzeit für jeden Rahmen ergibt, was zu höheren Bildraten führt , insbesondere bei H.264- Video. Es gibt eine neue Sound-API, die eine benutzerdefinierte Erstellung von Audio in Flash ermöglicht, was bisher noch nie möglich war. [9] Darüber hinaus unterstützt Flash Player 10 Peer to Peer (P2P) Kommunikation mitEchtzeit- Medienfluss- Protokoll (RTMFP).
  • Flash Player 11 : Die wichtigsten Ergänzungen in dieser Version sind erweiterte (Grafikkarte beschleunigte) 3D-Fähigkeiten für Windows Desktop, Mac Desktop, iOS , Android und andere wichtige Plattformen. Für die iOS-Plattform und andere Nicht-Desktop-Plattformen wurden signifikante Kompatibilitätsverbesserungen hinzugefügt. Weitere Features sind H.264-Kodierung für Kameras, Native JSON- Unterstützung, Cubic Bézier Curves, eine sichere Zufallszahlengenerator, LZMA- Komprimierung für SWF-Dateien, Arbeiter, um einige Code-Ausführung auf andere Prozessor-Threads, Grafikkarte beschleunigte Kamera-Feed-Rendering, Speicher-Intrinsics zu entlasten Und Performance-Analyse, und die ActionScript Compiler 2.0, sowie einige andere kleinere Ergänzungen. [10]
  • Flash Player 11.2 : im März 2012 veröffentlicht, konzentriert sich auf das Hinzufügen von Features, die Schlüssel für die Gaming-und Video-Märkte sind. Einige der Features in der Release gehören die folgenden: Mouse-Lock-Unterstützung. Rechts- und mittlere Mausklick-Unterstützung. Kontextmenü deaktivieren. Hardware-beschleunigte Grafik / Stage 3D-Unterstützung für Apple iOS und Android über Adobe AIR. Unterstützung für mehr Hardware beschleunigte Videokarten (ab Januar 2008), um die Verfügbarkeit von hardwarebeschleunigten Inhalten zu erweitern. New Throttle Event API (sendet Ereignis, wenn Flash Player den Inhalt drosselt, pausiert oder fortsetzt). Multithreaded Video Decoding Pipeline auf PCs, die die Gesamtleistung des Videos auf allen Desktop-Plattformen verbessert. Benachrichtigung über die Verwendung von Premium-Features in den Debug-Playern; Inhalt läuft uneingeschränkt in den Release-Spielern.
  • Flash Player 11.3: Im Juni 2012 veröffentlicht, konzentriert sich auf die Aktivierung von Funktionen und Funktionalität Schlüssel für den Gaming-Markt, sowie die Bekanntgabe beliebte Feature-Anfragen von Entwicklern. Einige der Features in dieser Version sind die folgenden: Keyboard-Eingang Unterstützung im Vollbild-Modus. Verbesserte Audio-Unterstützung für die Arbeit mit Low-Latency Audio. Fähigkeit, fortschrittlich Texturen für Stage 3D-Inhalte zu streamen. Geschützter Modus für Flash Player in Firefox. Frame-Label-Ereignisse. Unterstützung für das Komprimieren von BitmapData zu JPEG- und PNG-Formaten. Unterstützung für Mac OS X App Store Anwendung Sandboxen Anforderungen. Text-Streaming-Unterstützung für Stage 3D. Erweiterte Informationen über GPU-Treiberdetails. Bitmap zeichnen mit Qualität API (neu). Freigabe außerhalb der Mausereignis-API. Flash Player stille Update-Unterstützung für Mac OS. Stylus Unterstützung für Android 4.0 Geräte (Adobe AIR). USB-Debugging für iOS (Adobe AIR). IOS Simulator Unterstützung (Adobe AIR).
  • Flash Player 11.4 : im August 2012 veröffentlicht, konzentriert sich auf die Ermöglichung von Funktionen und Funktionalität, die für den Gaming-Markt wichtig sind, sowie die Adressierung beliebter Feature-Anfragen von Entwicklern. Einige der Features in dieser Version sind die folgenden: ActionScript-Mitarbeiter (ermöglicht gleichzeitige ActionScript-Ausführung auf separaten Threads). Unterstützung für fortgeschrittene Profilierung. LZMA Kompressionsunterstützung für ByteArray. Unterstützung für hardwarebeschleunigte Videokarten für Stage 3D erweitert auf 2006. Verbesserte ActionScript-Performance bei der Ausrichtung auf Apple iOS. Performance-Index-API, um über die Leistungsfähigkeit der aktuellen Umgebung zu informieren. Unterstützung für komprimierte Texturen mit Alpha-Unterstützung. Unterstützung für StageVideo.attachCamera API. Unterstützung für Push-Benachrichtigungen für iOS (Adobe AIR).
  • Flash Player 11.5 : im November 2012 veröffentlicht, konzentriert sich auf Leistungsverbesserung und Stabilität. Einige der Features in dieser Version sind die folgenden: Shared ByteArray-Unterstützung für ActionScript-Mitarbeiter. Debug-Stack-Trace in Release-Builds von Flash Player. Verschiedene Fehlerbehebungen
  • Flash Player 11.6 : im März 2013 veröffentlicht, konzentriert sich auf Leistungsverbesserungen, Sicherheitsverbesserungen und Stabilität. Einige der Features in dieser Version enthalten die folgenden: Fähigkeit, Grafik-Vektor-Daten zur Laufzeit abzufragen. Vollbild-Berechtigungsdialog Benutzeroberfläche Verbesserungen. Möglichkeit, SWFs zur Laufzeit zu laden, wenn sie als AIR-Anwendung im AOT-Modus auf iOS eingesetzt werden. Finer gekörte Kontrolle über unterstützte Display-Auflösung auf iOS-Geräte bei der Bereitstellung als AIR-Anwendung. HiDPI Unterstützung für Flash Professional. ActionScript 3 Zugriff auf schnelle Speicheroperationen / intrinsics
  • Flash Player 11.7 : veröffentlicht im Juni 2013, mit dem Codenamen „Geary“. Diese Version konzentriert sich auf Premium-Video, Spiele, Sicherheit und Stabilität. Einige der für diese Version geplanten Features beinhalten Folgendes: Android-Captive-Laufzeit-Debugging. Unterstützung für den OUYA Controller. Remote-Hosting von SWF-Dateien auf iOS. Verhinderung der Sicherung von gemeinsam genutzten Objekten auf iOS für eine bessere iCloud-Unterstützung.
  • Flash Player 11.8 (Codename Harrison) : Adobe plant eine Freigabe im frühen Teil des zweiten Halbjahres 2013, mit dem Codenamen „Harrison“. Diese Version konzentriert sich auf Premium-Video, Spiele, Sicherheit und Stabilität. Einige der Features in dieser Version sind die folgenden: Recursive Stop API auf MovieClips. GamePad-Unterstützung auf Desktop-Browsern und Android

Timeline von ActionScript Version

2000-2004: ActionScript „1.0“ Mit der Veröffentlichung von Flash 5 im September 2000 wurden die „Aktionen“ von Flash 4 nochmals erweitert und zum ersten Mal mit „ActionScript“ bezeichnet. [11] Dies war die erste Version von Actionscript mit Einflüssen von JavaScript und ECMA-262 (Third Edition) Standard unterstützt die Objektmodell der genannten Norm und viele seiner Kerndatentypen . Lokale Variablen können mit der var- Anweisung deklariert werden und benutzerdefinierte Funktionen mit Parameterübergabe und -rückgabeWerte können auch erstellt werden. Wichtig ist, dass ActionScript nun auch mit einem Texteditor eingegeben werden kann, anstatt durch Auswahl von Aktionen aus Dropdown-Listen und Dialogfeld-Steuerelementen zusammengesetzt zu werden. Mit der nächsten Version seines Authoring-Tools, Flash MX und dem entsprechenden Player, Flash Player 6 , blieb die Sprache im Wesentlichen unverändert; Es gab nur geringfügige Änderungen, wie z. B. die Hinzufügung der switch- Anweisung und der Operator „strict equality“ ( === ), der es näher an ECMA-262- kompatibel brachte. Zwei wichtige Features von ActionScript, die es von späteren Versionen unterscheiden, sind sein lose Typsystem und sein Vertrauen auf prototypbasierte Vererbung . Lose Typisierung bezieht sich auf die Fähigkeit einesVariable , um jede Art von Daten zu halten. Dies ermöglicht eine schnelle Skriptentwicklung und eignet sich besonders für kleinere Scripting-Projekte. Prototyp-basierte Vererbung ist der ActionScript 1.0-Mechanismus für Code-Wiederverwendung und objektorientierte Programmierung . Statt eines Klassenschlüssels , das gemeinsame Merkmale einer Klasse definiert , verwendet ActionScript 1.0 ein spezielles Objekt, das als „Prototyp“ für eine Klasse von Objekten dient. Alle gemeinsamen Merkmale einer Klasse werden im Prototypobjekt der Klasse definiert und jede Instanz dieser Klasse enthält eine Verknüpfung zu diesem Prototypobjekt.

2003-2006: ActionScript 2.0 Die nächste umfangreiche Revision der Sprache, ActionScript 2.0, wurde im September 2003 mit der Veröffentlichung von Flash MX 2004 und dem entsprechenden Player Flash Player 7 eingeführt . Als Reaktion auf die Nachfrage der Nutzer nach einer Sprache besser gerüstet , um für größere und komplexere Anwendungen, Actionscript 2.0 vorgestellten Kompilierung- Typprüfung und klassenbasierte Syntax , wie die Schlüsselwörter Klasse und erweitert . (Während dies für einen strukturierten objektorientierten Programmieransatz gestattet ist, wird der Code immer noch auf ActionScript 1.0 Bytecode kompiliert , so dass er auch auf dem vorangegangenen Flash Player 6 verwendet werden kannklassenbasierte Vererbung Syntax war eine Schicht über der bestehenden Prototyp-basierten System) . Mit Actionscript 2.0, Entwickler einschränken könnten Variablenauf einen bestimmten Typ durch Hinzufügen eines Typenannotation so dass Typdiskrepanzen bei gefunden werden konnte Compile-Zeit . Actionscript 2.0 auch klassenbasierte Vererbung eingeführt Syntax , so dass Entwickler Klassen und Schnittstellen schaffen könnten, so wie sie sich in klassenbasierten Sprachen wie Java und C ++ . Diese Version entspricht teilweise der ECMAScript Vierte Auflage.

2006-heute: ActionScript 3.0 Im Juni 2006 debütierte ActionScript 3.0 mit Adobe Flex 2.0 und dem entsprechenden Player Flash Player 9 . ActionScript 3.0 war eine grundlegende Umstrukturierung der Sprache, so dass es eine ganz andere virtuelle Maschine verwendet . Flash Player 9 enthält zwei virtuelle Maschinen, AVM1 für Code, die in ActionScript 1.0 und 2.0 geschrieben wurden, und AVM2 für Inhalte, die in ActionScript 3.0 geschrieben wurden. ActionScript 3.0 hat eine begrenzte Unterstützung für die Hardwarebeschleunigung ( DirectX , OpenGL ) hinzugefügt .

Das Update auf die Sprache führte mehrere neue Features ein:

  • Kompilieren Zeit und Laufzeit Typüberprüfung -artigen Informationen existiert sowohl auf der Kompilierung und Laufzeit.
  • Verbesserte Performance aus einem klassenbasierten Vererbungssystem, das sich von dem prototypbasierten Vererbungssystem unterscheidet.
  • Unterstützung für Pakete , Namespaces und reguläre Ausdrücke .
  • Kompiliert zu einem völlig neuen Bytecode , der mit ActionScript 1.0 und 2.0 Bytecode nicht kompatibel ist.
  • Überarbeitete Flash Player API , organisiert in Pakete .
  • Unified Event Handling System basierend auf dem DOM Event Handling Standard.
  • Integration von ECMAScript für XML (E4X) zum Zwecke der XML- Verarbeitung.
  • Direkter Zugriff auf die Flash- Laufzeit- Display-Liste für die vollständige Kontrolle über das, was zur Laufzeit angezeigt wird .
  • Vollständig konforme Umsetzung der ECMAScript vierten Auflage Entwurf Spezifikation.
  • Begrenzte Unterstützung für dynamische 3D-Objekte. (X, Y, Z-Rotation und Texturabbildung)

Flash Lite

  • Flash Lite 1.0 : Flash Lite ist die speziell für Mobiltelefone und Unterhaltungselektronik entwickelte Flash-Technologie. Unterstützt Flash 4 ActionScript.
  • Flash Lite 1.1 : Flash 4 ActionScript-Unterstützung und zusätzliche Geräte-APIs hinzugefügt.
  • Flash Lite 2.0 und 2.1 : Unterstützung für Flash 7 ActionScript 2.0 und einige zusätzliche fscommand2 API.
  • Flash Lite 3 : Unterstützung für Flash 8 ActionScript 2.0 und auch FLV -Videowiedergabe.
  • Flash Lite 4 : Unterstützung für Flash 10 ActionScript 3.0 als Browser-Plugin und Hardwarebeschleunigung der Hardware.

AIR

Adobe AIR unterstützt ActionScript, zusätzlich zu einigen erweiterten Inhalten, wie zum Beispiel die Stage3D Engine, die Adobe entwickelt hat. Die Anzahl der für ActionScript 3.0 verfügbaren APIs (Application Programming Interfaces) ist ebenfalls dramatisch gestiegen.

Syntax

ActionScript-Code ist freie Form und kann daher mit welcher Menge oder Art von Whitespace erstellt werden, die der Autor wünscht. Die Grundsyntax wird aus ECMAScript abgeleitet .

ActionScript 2.0

Der folgende Code, der in einem kompatiblen Spieler arbeitet, erzeugt ein Textfeld in der Tiefe 0, an Position (0, 0) auf dem Bildschirm (gemessen in Pixeln), das ist 100 Pixel breit und hoch. Dann wird der textParameter auf den “ Hallo, Welt “ String gesetzt und wird automatisch im Player angezeigt:

CreateTextField ( "greet" , 0 , 0 , 0 , 100 , 100 );
begrüßen . Text = "Hallo, Welt" ;

Beim Schreiben von externen ActionScript 2.0-Klassendateien könnte das obige Beispiel in eine Datei mit dem Namen Greeter.as wie folgt geschrieben werden.

Klasse com . Beispiel . Greeter erweitert MovieClip
{
 public function Greeter ()
 {
 var txtHello : TextField = this . CreateTextField ( "txtHello" , 0 , 0 , 0 , 100 , 100 );
 txtHello . Text = "Hallo, Welt" ;
 }
}

ActionScript 3.0

ActionScript 3.0 hat eine ähnliche Syntax zu ActionScript 2.0, aber einen anderen Satz von APIs zum Erstellen von Objekten. Vergleichen Sie das Skript unten mit der vorherigen ActionScript 2.0 Version:

Var greet : TextField = new TextField ();
begrüßen . Text = "Hallo Welt" ;
dies . AddChild ( grüße );

Minimal ActionScript 3.0-Programme können aufgrund der erhöhten Trennung der Programmiersprache und der Flash-IDE etwas größer und komplizierter sein.

Nehmen Sie die folgende Datei an Greeter.as :

Paket com.example
{
 import flash.text.TextField ;
 Import flash.display.Sprite ;
 Public class Greeter erweitert Sprite
 {
 public function Greeter ()
 {
 var txtHello : TextField = new TextField ();
 txtHello . Text = "Hallo Welt" ;
 AddChild ( txtHello );
 }
 }
}

Siehe auch: Sprite .)

ActionScript 3 kann auch in MXML- Dateien verwendet werden, wenn das Apache-Flex- Framework verwendet wird:

<? xml version = "1.0" encoding = "utf-8"?>
<s: Application xmlns: fx = "http://ns.adobe.com/mxml/2009"
 xmlns: s = „Bibliothek: // ns .Ybe.com / flex / mx / polysylabi "
 xmlns: mx = " library: //ns.adobe.com/flex/mx " layout = " vertical "
 creationComplete = " initApp () " >
 <fx: Skript>
 <! [CDATA [
 öffentliche Funktion initApp (): void
 {
 //
 Druckt unsere "Hallo, Welt!" Nachricht in Titel Titel . Text = "Hallo, Welt!" ;
 }
 ]]>
 </ Fx: Skript>
 "54" fontStyle = "fett" />
</ s: Anwendung>

Datenstrukturen

Datentypen

ActionScript besteht primär aus „fundamentalen“ oder „einfachen“ Datentypen, die zur Erstellung anderer Datentypen verwendet werden. Diese Datentypen sind den Java- Datentypen sehr ähnlich . Da ActionScript 3 ein komplettes Umschreiben von ActionScript 2 war, haben sich die Datentypen und deren Vererbung geändert.

ActionScript 2 Top-Level-Datentypen

  • String – Eine Liste von Zeichen wie „Hello World“
  • Nummer – beliebiger numerischer Wert
  • Boolean – Ein einfacher Binärspeicher, der nur „true“ oder „false“ sein kann.
  • Objekt – Objekt ist der Datentyp, auf den alle komplexen Datentypen angeben. Es ermöglicht die Gruppierung von Methoden, Funktionen, Parametern und anderen Objekten.

ActionScript 2 komplexe Datentypen

Es gibt zusätzliche „komplexe“ Datentypen. Diese sind mehr Prozessor und Speicher intensiv und bestehen aus vielen „einfachen“ Datentypen. Für AS2 sind einige dieser Datentypen:

  • MovieClip – Eine ActionScript-Erstellung, die eine einfache Nutzung von sichtbaren Objekten ermöglicht.
  • TextField – Ein einfaches dynamisches oder Eingabetextfeld. Erbt den Movieclip-Typ.
  • Button – Ein einfacher Button mit 4 Frames (Staaten): Up, Over, Down und Hit. Erbt den MovieClip-Typ.
  • Datum – Ermöglicht den Zugriff auf Informationen zu einem bestimmten Zeitpunkt.
  • Array – Ermöglicht die lineare Speicherung von Daten.
  • XML – Ein XML-Objekt
  • XMLNode – Ein XML-Knoten
  • LoadVars – Ein Load Variables Objekt ermöglicht das Speichern und Senden von HTTP POST und HTTP GET Variablen
  • Klingen
  • NetStream
  • NetConnection
  • MovieClipLoader
  • EventListener

ActionScript 3 primitive (Prime) Datentypen [12]

  • Boolean – Der Boolesche Datentyp hat nur zwei mögliche Werte: true und false oder 1 und 0. Es sind keine weiteren Werte gültig.
  • Int – Der int-Datentyp ist eine 32-Bit-Integer zwischen -2.147.483.648 und 2.147.483.647.
  • Null – Der Null-Datentyp enthält nur einen Wert, null. Dies ist der Standardwert für den String-Datentyp und alle Klassen, die komplexe Datentypen definieren, einschließlich der Objektklasse.
  • Number – Der Number-Datentyp kann Integer, unsigned Integers und Gleitkommazahlen darstellen. Der Nummern-Datentyp verwendet das 64-Bit-Doppelpräzisionsformat, wie es vom IEEE-Standard für Binär-Gleitpunkt-Arithmetik (IEEE-754) angegeben ist. Werte zwischen -9,007,199,254,740,992 (-2 53 ) bis 9,007,199,254,740,992 (2 53 ) können gespeichert werden.
  • String – Der String-Datentyp repräsentiert eine Sequenz von 16-Bit-Zeichen. Strings werden intern als Unicode-Zeichen gespeichert, wobei das UTF-16- Format verwendet wird. Frühere Versionen von Flash verwendeten das UTF-8-Format.
  • Uint – Der Datentyp uint (Unsigned Integer) ist eine 32-Bit-Ganzzahl ohne Vorzeichen zwischen 0 und 4,294,967,295.
  • Void – Der void-Datentyp enthält nur einen Wert undefiniert. In früheren Versionen von ActionScript war undefined der Standardwert für Instanzen der Object-Klasse. In ActionScript 3.0 ist der Standardwert für Objektinstanzen null.

ActionScript 3 einige komplexe Datentypen [12]

  • Array – Enthält eine Liste der Daten. Obwohl ActionScript 3 eine stark typisierte Sprache ist, kann der Inhalt eines Arrays von irgendeinem Typ sein und Werte müssen nach dem Abrufen wieder in ihren ursprünglichen Typ zurückgeführt werden. (Unterstützung für typisierte Arrays wurde vor kurzem mit der Vector-Klasse hinzugefügt.)
  • Datum – Ein Datumsobjekt, das die Datums- / Zeit-Digitaldarstellung enthält.
  • Error – Ein generisches Fehlerobjekt, das eine Laufzeitfehlerberichterstattung ermöglicht, wenn es als Ausnahme ausgelöst wird.
  • Flash.display: Bitmap – Ein nicht animiertes Bitmap-Anzeigeobjekt.
  • Flash.display: MovieClip – Animiertes Movieclip-Anzeigeobjekt ; Flash-Timeline ist standardmäßig ein MovieClip.
  • Flash.display: Shape – Ein nicht-animiertes Vektorformobjekt.
  • Flash.display: SimpleButton – Eine einfache interaktive Schaltflächenart, die „up“, „over“ und „down“ mit einem beliebigen Trefferbereich unterstützt.
  • Flash.display: Sprite – Ein Anzeigeobjektcontainer ohne Zeitleiste.
  • Flash.media:Video – Ein Video-Wiedergabeobjekt, das direkte (progressive Download) oder Streaming (RTMP) Transporte unterstützt. Ab Flash Player Version 9.0.115.0 wird das H.264 / MP4 High-Definition-Videoformat auch neben dem Standard Flash Video (FLV) unterstützt.
  • Flash.text: TextField – Ein dynamisches, optional interaktives Textfeldobjekt.
  • Flash.utils: ByteArray – Enthält ein Array von Binär-Byte-Daten.
  • Flash.utils: Dictionary – Wörterbücher sind eine Variante von Object, die Schlüssel eines beliebigen Datentyps enthalten kann (während Object immer Strings für seine Schlüssel verwendet).
  • Funktion – Die Kernklasse für alle Flash-Methodendefinitionen.
  • Objekt – Der Objektdatentyp wird durch die Objektklasse definiert. Die Objektklasse dient als Basisklasse für alle Klassendefinitionen in ActionScript. Objekte in ihrer Grundform können als assoziative Arrays verwendet werden , die Schlüsselwertpaare enthalten, wobei Schlüssel Strings und Werte jeglicher Art sind.
  • RegExp – Ein reguläres Ausdrucksobjekt für Zeichenfolgen.
  • Vector – Eine Variante des Arrays, die nur bei der Veröffentlichung für Flash Player 10 oder höher unterstützt wird. Vektoren sind eingegeben, dichte Arrays (Werte müssen definiert oder null), die feste Länge sein können und während des Abrufs gebunden werden. Vektoren sind nicht mehr typensicher als Arrays, sondern auch schneller.
  • XML – Ein überarbeitetes XML-Objekt basierend auf dem E4X (Standard ECMA-357); Knoten und Attribute werden unterschiedlich vom ActionScript 2.0-Objekt abgerufen (eine Legacy-Klasse namens XMLDocument ist für die Abwärtskompatibilität vorgesehen).
  • XMLList – Ein Array-basiertes Objekt für verschiedene Content-Lookups in der XML-Klasse.

Datentypen verwenden

Die Grundsyntax ist:

Var yourVariableName : YourVariableType = new YourVariableType ( Param1 , Param2 , ... , ParamN );

Also um ein leeres Objekt zu machen:

Var myObject : Objekt = neues Objekt ();

Oder auf informelle Weise:

Var myObject = {};

Einige Typen werden automatisch eingesetzt:

Var myString : String = "Hallo Wikipedia!" ; // Das würde automatisch die Variable als String setzen.
Var myNumber : Zahl = 5 ; // Das würde für eine Nummer das gleiche tun.
Var myObject : Objekt = { Param1 : "Hallo!" , Param2 : 76 }; // Dies erzeugt ein Objekt mit zwei Variablen.
// Param1 ist ein String mit den Daten von "Hi!",
// und Param2 ist eine Zahl mit den Daten von 76.
var myArray : Array = [5 , "hallo!" , { A : 5 , b : 7 }]; // Dies ist die Syntax für die automatische Erstellung eines Arrays.
// Es erzeugt ein Array mit 3 Variablen.
// Die erste (0) ist eine Zahl mit dem Wert von 5,
// die zweite (1) ist ein String mit dem Wert von "Hallo!",
// und der dritte (2) ist ein Objekt mit {a: 5, b: 7}.

Im Gegensatz zu einigen objektorientierten Sprachen unterscheidet ActionScript nicht zwischen primitiven Typen und Referenztypen . In ActionScript sind alle Variablen Referenztypen. Jedoch sind Objekte, die zu den primitiven Datentypen gehören, die Boolean, Number, int, uint und String enthalten, unveränderlich. [13]

Wenn also eine Variable eines vermeintlich primitiven Typs, z. B. eine Ganzzahl, an eine Funktion übergeben wird, verändert die Variable innerhalb der Funktion die ursprüngliche Variable nicht, da in der Funktion ein neues int-Objekt erzeugt wird. Wenn eine Variable eines anderen (nicht primitiven) Datentyps, z. B. XML, an eine Funktion übergeben wird, verändert diese Variable innerhalb der Funktion auch die ursprüngliche Variable, da kein neues XML-Objekt erstellt wird.

Manche Datentypen können mit literalen Werten zugeordnet werden :

Var item1 : String = "ABC" ;
Var item2 : Boolean = true ;
Var item3 : Zahl = 12 ;
Var item4 : Array = [ "a" , "b" , "c" ];
Var item5 : Objekt = { name : "Actionscript" , Version : "3.0" };
Var item6 : XML = <Node > < child /> </ node >; // Beachten Sie, dass das primitive XML nicht zitiert wird

Eine Referenz in ActionScript ist ein Zeiger auf eine Instanz einer Klasse. Eine Referenz speichert die Speicheradresse eines Objekts – Operationen gegen Referenzen folgen dem Wert der Referenz auf die Speicheradresse des Objekts und führen die Operation an diesem Objekt aus. Alle Objekte in ActionScript werden über Referenzen aufgerufen, anstatt direkt aufgerufen zu werden.

Var item1 : XML = neues XML ( "<node> <child /> </ node>" );
Var item2 : XML = item1 ;
item2 . first . Attribute . Wert = 13 ;
// item1 ist nun gleich item2, da item2 einfach darauf hinweist, auf was item1 verweist.
// Beide sind jetzt:
// <node> <child value = "13" /> </ node>

Nur Verweise auf ein Objekt können mit dem Schlüsselwort „Löschen“ entfernt werden. Das Entfernen von tatsächlichen Objekten und Daten erfolgt durch den Flash Player Garbage Collector, der auf vorhandene Referenzen im Flash Speicherplatz überprüft. Wenn keine gefunden wird (keine andere Referenz auf das verwaiste Objekt gemacht), wird es aus dem Speicher entfernt. Aus diesem Grund erfordert die Speicherverwaltung in ActionScript eine sorgfältige Anwendungsentwicklungsplanung.

Var item1 : XML = neues XML ( "<node> <child /> </ node>" );
Artikel1 löschen ; // Wenn in der Anwendung kein anderer Verweis auf item1 vorhanden ist, wird er auf dem nächsten Pass des Garbage Collectors entfernt

Codeschutz

Wie bei allen Zwischensprachen kompilierten Code wie Flash und Microsoft .NET , sobald eine SWF- Datei lokal gespeichert ist, kann es in seinen Quellcode und Assets dekompiliert werden. Einige Decompiler sind in der Lage, eine nahezu vollständige Rekonstruktion der ursprünglichen Quelldatei, bis zu dem tatsächlichen Code, der während der Erstellung verwendet wurde (obwohl die Ergebnisse variieren von Fall zu Fall). [14] [15] [16]

Im Gegensatz zu den Decompilern wurden ActionScript- Obfuscators eingeführt, die Code in eine Form umwandeln, die die Decompilerausgabe unter Beibehaltung der Funktionalität und Struktur des Programms unterbricht. Hochwertige Obfuskatoren implementieren lexikalische Transformationen wie Identifikationsumbenennung, Steuerfluss-Transformation und Datenabstraktionstransformation, die es gemeinsam für Decompiler schwieriger machen, eine Leistung zu erzeugen, die für einen Menschen nützlich ist. Weniger robuste Obfuskatoren fügen Fallen für Decompiler ein. Solche Obfuscatoren verursachen entweder, dass die Decompiler-Software unerwartet abstürzt oder einen unverständlichen Quellcode generiert.

Das folgende ist ein Beispiel für ActionScript 3.0-Code, der von einem Decompiler-Programm erzeugt wird, vor und nach der Verschleierung.

Code vor Verschleierung:

Private Funktion getNeighbours ( i : int , j : int ): Array {
 var a : Array = new Array ();
 Für ( var k = 0 ; k < 8 ; k ++) {
 var ni = i + int ( neighbour_map [ k ] [ 0 ]);
 Var nj = j + int (Neighbour_map [ k ] [ 1 ]) ;
 Wenn ( ni < 0 || ni > = xsize || nj < 0 || nj > = ysize )
 weiter ;
 ein . Push ( Zelle ( Zellen [ ni ] [ nj ]));
 }
 Return a ;
}

Code nach Verschleierung:

Private Funktion getNeighbours ( _arg1 : int , _arg2 : int ): Array {
 var _local3 : Array = - ((( null - ! NULL !) % ~ ( Undefined )));
 Var _local4 : *;
 Var _local5 : *;
 Var _local6 : *;
 _local3 = neues Array ();
 _local4 = 0 ;
 Für (; // ungelösten Sprung
 , _arg2 < 8 ; _local4 ++) {
 _local5 = ( _arg1 + int (! NULL !));
 _local6 = ( _arg2 + int (! NULL !));
 If ( true ) {
 _arg1 = (((// ungelöster nextvalue oder nextname << ! NULL !) + ! NULL !)
<< undefined );
 _arg1 = (! (; NULL !) ^ ! NULL !);
 (; NULL ! Instanceof ! NULL !);
 Var _local1 = ((; (; NULL ! Wie ! NULL !) + ! NULL !) == this );
 Wenn (! (! NULL ! == ! NULL !)) {
 - (( true << ! NULL !)). Push ( Zelle ( Zellen [ _local5 ] [ _local6 ]));
 }
 }
 If (! True ) {
 ( _local6 < 0 );
 ( _local6 < 0 );
 ( _local5 < 0 );
 }
 }
Return ( _local3 );
}

Referenzen

  1. Jump up^ RFC 4329(Begrenzung kompatibel mit EcmaScript)
  2. Jump up^ „Apples verlorenen Jahrzehnt, HyperCard, und was könnte nicht gewesen sein, wenn Apple dann war wie Apple ist heute“ . zdnet.com . 2011-04-17 . Abgerufen 2014-12-04 .
  3. Jump up^http://help.adobe.com/livedocs/specs/actionscript/3/wwhelp/wwhimpl/js/html/wwhelp.htm
  4. Jump up^ Brimelow, Lee (18. August 2008). „Sechs Gründe für ActionScript 3.0“. Adobe Systems Incorporated . Abgerufen am 18. Juni 2010 .
  5. Springe auf^ Grossmann, Gary; Huang, Emmy (27. Juni 2006). „ActionScript 3.0-Übersicht“ . Adobe Systems Incorporated . Abgerufen am 18. Juni 2010.
  6. Jump up^ „Standard ECMA-262“ . Ecma-international.org . Abgerufen am 22. April 2013 .
  7. Jump up^ „ECMAScript“ . ECMAScript. Archiviert vom Original am 23. Februar 2001 . Abgerufen am 22. April 2013 .
  8. Jump up^ „Flash Player | Adobe Flash Player 11 | Übersicht“ . Adobe.com. 9. April 2013 . Abgerufen am 22. April 2013 .
  9. Jump up^ „Adobe Labs – Adobe Flash Player 10.1“ . Labs.adobe.com Archiviert vom Original am 5. Januar 2010 . Abgerufen am 17. Dezember2009 .
  10. Jump up^ „Flash Player 11 und AIR 3 Release Notes für Adobe Labs“ (PDF) . Tote link ]
  11. Jump up^ „Flash Player 11, AIR 3 Release Notes“ . helpx.adobe.com . Abgerufen 2016-10-07 .
  12. ^ Springe bis zu:bhttp://livedocs.adobe.com/flash/9.0/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file=00000047.html
  13. Springe^ „Flex 3 – Funktionsparameter“ . Livedocs.adobe.com . Abgerufen am 17. Dezember 2009 .
  14. Jump up^ „Drittanbieter-Review eines anderen Decompilers“ . Flashmagazine.com 21. Oktober 2007 . Abgerufen am 22. April 2013 .
  15. Jump up^ „Kundenkommentare zu einem Flash-Decompiler“ . Topshareware.com . Abgerufen am 22. April 2013 .
  16. Jump up^ Kundenkommentare zu einem anderen Flash-Produkt Archiviert18. August 2006, an derWayback Machine.

Write a Comment

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.