本站版权所有 新丁flash资源网 保留所有权利 未经许可请勿任意转载或复制使用
请使用1024*768分辨率浏览本站以达到浏览新丁flash资源网的最佳视觉效果
新丁flash资源网中所有的解压密码均为:www.qnflash.com
粤ICP备08010396号

声明:此教程为webstudio翻译教程,英文原版来自senocular的Getting Started with ActionScript 3.0 in Adobe Flash CS3如果转载本站的中文教程,请注明出处.
随着flash cs3的到来,同时提供给我们一个崭新的,针对Adobe Flash(swf)影片和功能程序的标准的程序开发语言。在之前的一段时间里,你可能发现入门ActionScript 3.0与其它版本的ActionScript相比会有一些难度.例如,如果拿ActionScript 1.0到ActionScript 2.0的变化相比的话,那么对于ActionScript变化到ActionScript 3.0可以说是一个比较大的跳跃了。特别是那些倾向于在flash ide中编写代码程序员,这篇文章将帮助你如何在flash cs3 ide中工作。
运行环境
1.Flash CS3
2.有一些ActionScript或是Javascirpt基础
如果不使用CS3或是没有Flash CS3怎么办?你可以从这里学习使用免费的flex 2 sdk来学习ActionScript 3. Beginners Guide to Getting Started with ActionScript 3 (Without Learning Flex)
索引
1. 历史简介
2. ActionScript 3 基本的一些不同之处
3. 一般性内容
a. Variables 变量
b. Functions 函数
c. Objects/Classes对象/类
d. Events 事件
4. ActionScript和时间线
5. 使用Display Objects.
ActionScript历史简介 
早期的flash 3中的ActionScript 1.0语法冗长,主要的应用是围绕着帧的导航和鼠标的交互.这种状况一直保持到flash 5. 到flash 5版本时ActionScript已经很象JavaScript了。它提供了很强的功能和为变量的传输提供了点语法。ActionScript同时也变成了一种prototyped(原型)语言,允许类似于在javscript中的简单的oop功能。这些在随后的flash mx(6)版本中得到的增强。
Flash MX2004(7)引入了ActionScript 2.0,它带来了两大改进:变量的类型检测和新的class类语法。ActionScript 2.0的变量类型会在编译时执行强制类型检测。它意味着当你在发布或是编译你的影片时任何指定了类型的变量都会从众多的代码中剥离出来,检查是否与你现有的代码存在矛盾冲突。如果在编译过程中没有发现冲突,那么你的swf将会被创建,没有任何不可理解变量类型的代码将会运行。尽管这个功能对于flash player的回放来说没有什么好处,但对于flash创作人员来它是一个非常的好工具,可以帮助调试更大更复杂的程序。
在ActionScript 2.0中的新的class类语法用来在ActionSctipt 2.0中定义类。它类似于Java语言中的定义。尽管Flash仍不能超越它自身的原型来提供真正的class类,但新的语法提供了一种非常熟悉的风格来帮助用户从其它语言上迁移过来,提供了更多的方法来组织分离出来As文件和包。 
接下来我们进入到flash CS3(9;在flash8中没有发生多大的变化)ActionScript 3.这里我们不光有一个带有新的版本号的ActionScirpt 语言,还有一个全新的虚拟机即—Flash Player在回放时执行ActionScript的底层软件。ActionScript 1和ActionScript 2都使用是AVM1(ActionScript 虚拟机1),因此它们在需要回放时本质上是一样的,记得我们在ActionScript2上说过它增加了强制变量类型和新的类语法,它实际上在最终编译时变成了ActionScript 1,而ActionScript 3.0运行在AVM2上,一种新的专门针对ActionScirpt 3代码的虚拟机。基于上面的原因,ActionScript 3.0影片不能直接与ActionScript 1和ActionScript 2影片直接通讯(ActionScript 1和ActionScript 2的影片可以直接通讯,因为他们使用的是相同的虚拟机;如果要ActionScirpt 3影片与ActionScirpt 1和ActionScript 2的影片通讯,只能通过local connection),但是你会发现ActionScript 3的改变更深远更有意义。
下面是各个版本的代码示范:
ActionScript 1
代码:
function Example(){
this.num = 1;
}
Example.prototype.str = "text";
Example.prototype.doubleNum = function(){
this.num *= 2;
}
class Example {
public var num:Number;
private var str:String = "text";
public function Example(){
this.num = 1;
}
public function doubleNum():Void {
this.num *= 2;
}
}
package {
public class Example {
public var num:Number;
protected var str:String = "text";
public function Example(){
this.num = 1;
}
public function doubleNum():void {
this.num *= 2;
}
}
}

var myVariableName; // 需要使用var
myDynamicObject.newVar = value; // 不需要var
// 任意的时间代码
var name:String = "Joe"; // 错误:与现有的内置变量名称冲突
var x = value; // ok
…
var x = differentValue; // 错误:你只能使用一次var关键词。
var x:Number; // 变量x将用于承载数值型数据
var untyped:*; // (or no typing) undefined
var boolean:Boolean; // false
var number:Number; // NaN
var integer:int; // 0
var unsignedInteger:uint; // 0
var string:String; // null
var object:Object; // null
if (isNaN(myNumber)) //检查myNumber是否已定义.
// 指定名称的函数
function doubleNumber(num) {
return num*2;
}
// 同样的没有指定名称的函数
var doubleNumber = function(num) {
return num*2;
}
var x:Number = 10;
trace(doubleNumber(x)); // traces 20
// 命名函数
function doubleNumber(num:Number):Number {
return num*2;
}
// 相同功能的未命名函数。
var doubleNumber:Function = function(num:Number):Number {
return num*2;
}
function returnsNothing():void {
// do nothing
}
trace(returnsNothing()); // trace的结果为undefined.
returnsNothing(3); // 错误:不正确的参数值
// 这里,message参数是任意指定的。
function usesDefault(message:String = "hello"):void {
trace(message);
}
usesDefault("test"); // trace结果为 "test"
usesDefault(); // trace结果为"hello",即默认值。
// 错误:没有必须的参数
// num定义在了message之后。
function usesDefault(message:String = "hello", num:Number):void {
// code
}
// 正确; usesDefault至少需要一个参数,最大是两个参数
// least 1 argument, accepts 2 at max
function usesDefault(num:Number, message:String = "hello"):void {
// code
}
function passAnything(...statements):void {
trace(statements.length +": "+ statements);
}
passAnything(); // traces 0:
passAnything(1); // traces 1: 1
passAnything("a", true, 0); // traces 3: a,true,0