|
ActionScript
Web Design & Development Guide
ActionScript
Home | Up
'ActionScript'
Paradigm: |
Object-oriented |
Appeared in: |
1998 |
Designed by: |
Gary Grossman |
Developer: |
Macromedia,
Adobe Systems |
Latest release: |
3.0 / June 27, 2006 |
Typing discipline: |
Strongly, Statically, Safely typed |
Major implementations: |
Adobe Flash,
Adobe Flex |
Influenced by: |
JavaScript, Java |
OS: |
Cross-platform |
|
ActionScript |
File extension: |
.as |
MIME type: |
application/actionscript[1] |
ActionScript is a scripting language based on ECMAScript, used
primarily for the development of websites and software using the Adobe Flash
Player platform (in the form of SWF files embedded into Web pages). Originally
developed by Macromedia, the language is now owned by Adobe
(which acquired Macromedia in 2005) and continues its development. ActionScript
was initially designed for controlling simple 2D vector animations made in
Adobe
Flash (formerly
Macromedia Flash). Later versions added functionality allowing for the
creation of Web-based games and
rich Internet applications with streaming media (such as video and audio).
History
ActionScript started as a
scripting language for the
Macromedia Flash authoring tool. The first three versions of the Flash
authoring tool provided limited interactivity features. Early Flash developers
could attach a simple command, called an "action", to a button or a frame. The
set of actions was limited to basic navigation controls, with commands such as
"play", "stop", "get URL", and "goto and play".
With the release of Flash 4 in 1999, this simple set of actions matured into
a small
scripting language. New capabilities introduced for Flash 4 included variables,
expressions, operators, if statements, and loops. Although referred to internally as "ActionScript", the Flash 4 user
manual and marketing documents continued to use the term "actions" to describe
this set of commands.
Time line by player
- Flash Lite 1.0 and 1.1: Flash Lite is the Flash technology
specifically developed for mobile phones and consumer electronics devices.
Flash Lite 1.1 supports Flash 4 ActionScript.
- Flash Lite 2.1: Added support for Flash 7 ActionScript 2.0.
- Flash Player 2: First version with scripting support, actions
included gotoAndPlay, gotoAndStop, nextFrame and nextScene for timeline
control.
- Flash Player 3: Expanded basic scripting support with the ability
to load external SWFs
(loadMovie).
- Flash Player 4: First player with a full scripting implementation
(called Actions). The scripting was a slash based syntax and
contained support for loops, conditionals, variables and other basic
language constructs.
- Flash Player 5: Included the first version of true ActionScript.
Used Prototype-based programming based on ECMAScript, and allowed full
Procedural programming and Object-Oriented programming.
- Flash Player 6: Added an event handling model, and support for
switch.
- Flash Player 7: Flash Player 7 offered some new features such as
CSS text and performance improvements. Macromedia Flash compilers released
alongside Flash Player 7 also support ActionScript 2.0, a Class programming
language based on the ECMAScript 4 Netscape Proposal. However, ActionScript
2.0 can cross compile to ActionScript 1.0 byte-code, so it can be run by Flash Player 6.
- Flash Player 8: Further extended ActionScript 2.0 by adding new
class libraries with APIs for controlling bitmap data at run-time, and
file-upload.
- Flash Player 9 (initially called 8.5): Added ActionScript 3.0
with the advent of a new virtual machine, called AVM2 (ActionScript Virtual
Machine 2), which coexists with the previous AVM1 needed to support legacy
content. Performance increases were a major objective for this release of
the player including a new JIT compilation. This is the first release of the
player to be titled Adobe Flash Player.
Time line by ActionScript version
2000–2003: ActionScript "1.0" With the release of Flash 5 in September
2000, the "actions" from Flash 4 were enhanced once more and named
"ActionScript" for the first time.[2]
This was the first version of ActionScript with influences from JavaScript and
the ECMA-262 (Third Edition) standard, supporting the said standard's object
model and many of its core data types. Local variables may be declared with the
var statement, and user-defined functions with parameter passing and return
values can also be created. Notably, ActionScript could now also by typed with a
text editor rather than being assembled by choosing actions from drop-down lists
and dialog box controls. With the next release of its authoring tool, Flash MX,
and its corresponding player, Flash Player 6, the language remained essentially
unchanged; there were only minor changes, such as the addition of the switch
statement and the "strict equality" (===) operator, which brought it closer to
being ECMA-262-compliant. Two important features of ActionScript that
distinguish it from later versions are its loose type system and its reliance on
prototype-based inheritance. Loose typing refers to the ability of a variable to
hold any type of data. This allows for rapid script development and is
particularly well-suited for small-scale scripting projects. Prototype-based
inheritance is the ActionScript 1.0 mechanism for code reuse and object-oriented
programming. Instead of a class keyword that defines common characteristics of a
class, ActionScript 1.0 uses a special object that serves as a "prototype" for a
class of objects. All common characteristics of a class are defined in the
class's prototype object and every instance of that class contains a link to that prototype object.
2003–2006: ActionScript 2.0 The next major revision of the language,
ActionScript 2.0, was introduced in September 2003 with the release of Flash MX
2004 and its corresponding player, Flash Player 7. In response to user demand
for a language better equipped for larger and more complex applications,
ActionScript 2.0 featured compile-time type checking and class-based syntax,
such as the keywords class and extends. (While this allowed for a more flexible
object-oriented programming approach, the code would still be compiled to
ActionScript 1.0 bytecode, allowing it to be used on the preceding Flash Player
6 as well. In other words, the class-based inheritance syntax was a layer on top
of the existing prototype-based system.) With ActionScript 2.0, developers could
constrain variables to a specific type by adding a type annotation so that type
mismatch errors could be found at compile-time. ActionScript 2.0 also introduced
class-based inheritance syntax so that developers could create classes and
interfaces, much as they would in class-based languages such as Java and C++.
This version conformed partially to the ECMAScript Fourth Edition draft specification.
2006–today: ActionScript 3.0 In June 2006, ActionScript 3.0 debuted
with Adobe
Flex 2.0 and its corresponding player,
Flash Player 9. ActionScript 3.0 was a fundamental restructuring of the
language, so much so that it uses an entirely different virtual machine. Flash
Player 9 contains two virtual machines, AVM1 for code written in ActionScript 1.0 and 2.0, and
AVM2 for content written in ActionScript 3.0. ActionScript 3.0 provides not only
a significant enhancement in performance, but also a more robust programming
model that lends itself to complex
Rich Internet Application development.
The update to the language introduced several new features:
-
Compile-time and runtime type checking—type information exists at both compile-time and runtime.
- Improved performance from a class-based inheritance system separate from
the prototype-based inheritance system.
- Support for packages, namespaces, and regular expressions.
- Compiles to an entirely new type of bytecode, incompatible with
ActionScript 1.0 and 2.0 bytecode.
- Revised Flash Player
API, organized into packages.
- Unified
event handling system based on the DOM event handling standard.
- Integration of ECMAScript for XML (E4X) for purposes of XML
processing.
- Direct access to the Flash runtime display list for complete control of
what gets displayed at runtime.
- Completely conforming implementation of the
ECMAScript Fourth Edition Draft specification.
Syntax
ActionScript code is
free form and thus may be created with whichever amount or style of
whitespace that the author desires.
ActionScript 2.0
When one is working with the
Macromedia Flash
IDE, it is possible to use the trace() function to print
information in the application's output terminal. If one uses this command, then
a very short "legal" program in ActionScript would be the following code on
frame 1 of layer 1 in an otherwise empty Flash document:
However, due to this command being unused in other interpreters of the
language, such as the standard
Adobe Flash Player, it is reasonable to suggest that this does not suffice.
For such a reason, one can consider the following code instead, which works in
any compliant player, as the shortest program instead:[3]
createTextField("greet", 0, 0, 0, 100, 100);
greet.text = "Hello, world!";
This creates a text field at depth 0, at location 0, 0 px on the screen, that
is 100 px wide and high. Then the "text " parameter is set to the "Hello,
world!" string, and it is automatically displayed in the player.
When writing external ActionScript 2.0 class files the above example could be
written in a file named Greeter.as as following.
class com.example.Greeter extends MovieClip
{
public function Greeter() {
var txtHello:TextField = this.createTextField("txtHello", 0, 0, 0, 100, 100);
txtHello.text = "Hello World";
}
}
ActionScript 3.0
Minimal ActionScript 3.0 programs are somewhat larger and more complicated
due to the inherently different structure of an application, and the increased
separation of the programming language and the Flash IDE.
Presume the following file to be Greeter.as:
''package com.example
{
import flash.text.TextField;
import flash.display.Sprite;
public class Greeter extends Sprite {
public function Greeter(){
var txtHello:TextField = new TextField();
txtHello.text = "Hello World";
addChild(txtHello);
}
}
}''
Finally, an example of using ActionScript when developing
Flex
applications, again presuming the following content to be in a file named
Greeter.as:
package
{
public class Greeter {
public static function sayHello() : String {
var greet:String = "Hello, world!";
return greet;
}
}
}
This code will work with the following
MXML application
file:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns="*" layout="vertical" creationComplete="initApp()">
<mx:Script>
<![CDATA[[
public function initApp() : void
{
// Prints our "Hello, world!" message into "mainTxt".
mainTxt.text = Greeter.sayHello();
}
]]>
</mx:Script>
<mx:Label id="title" fontSize="24" fontStyle="bold" text="\"Hello, world!\" Example"/>
<mx:TextArea id = "mainTxt" width="250"/>
</mx:Application>
Examples
ActionScript 2.0 Examples
The following prints Hello world into the Flash IDE output panel. Note this
will only work when run inside the Flash IDE, as the trace function is only supported inside it.
The following code prints
Hello
world to the stage.
_root.createTextField("myText", 1, 0,0,100,25);
_root.myText.text = "Hello world!";
The following code outputs the current mouse position when the mouse moves,
by using the onMouseMove event. Again this will only work in the Flash IDE.
onMouseMove = function () {
trace ("X: "+_root._xmouse);
trace ("Y: "+_root._ymouse);
};
The following code, when placed on a
Button, begins to play the timeline of the MovieClip the button is placed
in. This also applies to the root timeline since the root is considered a
MovieClip as well.
This more advanced example creates an array containing numbers and strings,
and assigns a number to a variable called num and a string to a
variable called str using prototype functions and function
recursion. Then, using the MovieClip API, a text field is drawn on screen, into
which the variable values are written.
var myArray:Array = new Array ("Hello", "ActionScript", 3, 7, 11, "Flash");
Array.prototype.pickNumber = function():Number {
var rand:Number = random(this.length);
return (typeof (this[rand]) == "number") ? this[rand] : this.pickNumber();
};
Array.prototype.pickString = function():String {
var rand:Number = random(this.length);
return (typeof (this[rand]) == "string") ? this[rand] : this.pickString();
};
var num:Number = myArray.pickNumber();
var str:String = myArray.pickString();
_root.createTextField ("txt", 1, 10, 10, 530, 390);
txt.text = "Array = "+myArray+"\nRandom Number = "+num+"\nRandom String = "+str;
Array and dataProvider example:
var aData:Array = [{name: "J. Bell", age: "55"}, {name: "B. Longman", age: "21"}];
dataGrid.dataProvider = aData;
ActionScript 3.0 Examples
This Hello World example uses ActionScript 3.0:
package {
import flash.display.Sprite;
import flash.text.TextField;
import flash.filters.DropShadowFilter;
public class HelloWorld2 extends Sprite {
public function HelloWorld2() {
var shad:DropShadowFilter = new DropShadowFilter (2, 45, 0x000000, 25, 3, 3, 2, 2);
var txt:TextField = new TextField();
txt.textColor = 0xFFFFFF;
txt.filters = [shad];
txt.width = 120;
txt.x = Math.random()*300;
txt.y = Math.random()*300;
txt.selectable = false;
txt.text = "Hello World welcome! ["+Math.round(txt.x)+","+Math.round(txt.y)+"]";
addChild(txt);
}
}
}
Data structures
Data types
ActionScript primarily consists of "fundamental" or "simple" data types which
are used to create other data types. These data types are very similar to Java
data types. Since ActionScript 3 was a complete rewrite of ActionScript 2, the
data types and their inheritances have changed
ActionScript 2 top level data types
- String - A list of characters such as "Hello World"
- Number - Any Numeric value
- Boolean - A simple binary storage that can only be "true" or
"false".
- Object - Object is the data type all complex data types inherit
from. It allows for the grouping of methods, functions, parameters, and
other objects.
ActionScript 2 complex data types
There are additional "complex" data types. These are more processor and
memory intensive and consist of many "simple" data types. For AS2, some these
data types are:
- MovieClip - An ActionScript creation that allows easy usage of
visible objects.
- TextField - A simple dynamic or input text field. Inherits the
Movieclip type.
- Button - A simple button with 4 frames (states): Up, Over, Down
and Hit. Inherits the MovieClip type.
- Date - Allows access to information about a specific point in
time.
- Array - Allows linear storage of data.
- XML - An XML object
- XMLNode - An XML node
- LoadVars - A Load Variables object allows for the storing and
send of HTTP POST and HTTP GET variables
- Sound
- NetStream
- NetConnection
- MovieClipLoader
- EventListener
ActionScript 3 top level data types
- Boolean - The Boolean data type has only two possible values:
true and false. No other values are valid.
- int - The int data type is a 32-bit integer between
-2,147,483,648 and 2,147,483,647.
- Null - The Null data type contains only one value, null. This is
the default value for the String data type and all classes that define
complex data types, including the Object class.
- Number - The Number data type can represent integers, unsigned
integers, and floating-point numbers. The Number data type uses the 64-bit
double-precision format as specified by the IEEE Standard for Binary
Floating-Point Arithmetic (IEEE-754).
- String - The String data type represents a sequence of 16-bit
characters. Strings are stored internally as Unicode characters, using the
UTF-16 format. Previous versions of flash used the UTF-8 format.
- uint - The uint (Unsigned Integer) data type is a 32-bit unsigned
integer between 0 and 4,294,967,295.
- void - The void data type contains only one value, undefined. In
previous versions of ActionScript, undefined was the default value for
instances of the Object class. In ActionScript 3.0, the default value for
Object instances is null.
ActionScript 3 complex data types
- Object - The Object data type is defined by the Object class. The
Object class serves as the base class for all class definitions in
ActionScript.
- Array - Contains a list of data. The items in the list can be of
any type, even other arrays.
- Date
- Error
- Function
- RegExp
- XML
- XMLList
Using Data Types
Using these data types in ActionScript is quite simple. The basic syntax is:
var YourVariableName:YourVariableType = new YourVariableType(Param1, Param2, ..., ParamN);
So in order to make an empty Object:
var MyObject:Object = new Object();
Some types are automatically put in place:
var MyString = "Hello Wikipedia!"; // This would automatically set the variable as a string.
var MyNumber = 5; // This would do the same for a number.
var MyObject = {Param1:"Hi!", Param2:76}; //This creates an object with two variables.
// Param1 is a string with the data of "Hi!",
// and Param2 is a number with the data of 76.
var MyArray = [5,"Hello!",{a:5, b:7}] //This is the syntax for automatically creating an Array.
//It creates an Array with 3 variables.
//The first (0) is a number with the value of 5,
//the second (1) is a string with the value of "Hello!",
//and the third (2) is an object with {a:5, b:7}.
Criticisms
- Slow Compiler - Complaints have long been levelled at Adobe that
Flash IDE's compiler is slow. The claim is debatable but several alternative
compilers exist now such as Haxe, MTASC, and the Flex 2 compiler.
- Proprietary language - Some of Adobe's releasing of the SWF file
format to the open source community has been criticized as too little
- Components and backward-compatibility - Two versions of
components cause compatibility problems
- Weak typing - Actionscript syntax is very tolerant and therefore
more robust than some programming languages. For example, ActionScript 2
allows programmers to implement strict datatyping, but does not force them
to do so. It also fails silently in most cases, so error-catching must be
custom-built by the programmer. (ActionScript 3.0 resolves this issue)
- Performance - Flash's ActionScript
VM tends to hit a ceiling quickly in regards to the amount of
computation that ActionScript can perform before triggering an internal
timeout, especially on the Mac Flash Player. Simply counting the numbers
from 1 to 5000, for instance, threatens to exceed the capacity of the Flash
Player for some users.
Footnotes
-
^
RFC 4329
-
^
Note that the name "ActionScript 1.0" is a retronym,
coined after the release of ActionScript 2.0.
-
^
Note that this is also valid ActionScript "1.0", the original scripting
language of Flash. However, it does not produce a visible text box in
Flash Player versions lower than 6, as an embedded font is required.
See also
External links
Adobe documentation and references
Developer community sites
Tools and scripts
Home | Up | Adobe Flex | Flash cartoons | Action Message Format | ActionScript | Adobe Shockwave | Animation portal | SWF
Web Design & Development Guide, made by MultiMedia | Websites for sale
This guide is licensed under the GNU
Free Documentation License. It uses material from the Wikipedia.
|
|