1.转自 http://www.kingda.org 的链接
ActionScript 3 教程系列
ActionScript 3.0系列教程(1):与Flash9先来一次亲密接触!
AS 3.0教程(2):AS3.0的类及绑定
AS3.0教程(3)document Class特色为我们带来了什么?
AS3.0教程(4):爽快使用XML
AS3.0教程(5):强大的事件机制(1)
AS3.0教程(6):强大的事件机制(2)
AS3.0教程(7):强大的事件机制(3)
AS3.0教程(8):强大的事件机制(4)
AS3.0教程(9):强大的事件机制(5)
AS3.0教程(10):强大的事件机制(6)
AS3.0教程(11): 视觉元件精要(1)
AS3.0教程(12):享受异常处理机制的时候到了
ActionScript 3教程 (外篇)
小谈ActionScript 3.0与AS 2.0,1.0的swf兼容性
AS3.0教程(外1):Flash 9 Alpha 调试须知
AS3.0教程(外2):用flash9试用版编译as3的问题
ActionScript 2 疑难解答系列
解疑(7):AS2动态改变影片注册点
解疑6:罕见的LoadVars怪异bug
解疑5:UI组件创建不出来
解疑4:解决flash性能难题(1)
疑难解决3:createClassObject总是不成功
疑难解决2:为何首页做的load条总是开始于40%或更多以后才显示
疑难解决1:Key.addListener失去作用 ??
疑难解决系列0:Fla文件编译SWF后体积变超大
ActionScript 2 高级教程
ActionScript高级技巧:深入了解Function(1)
ActionScript高级技巧:深入了解Function(2)
制作mxp安装文件的几个要点
AS心得:浅释ActionScript的代码优化
Flash开发习惯的讨论很有意思的讨论,非教程下面还有一些黑羽制作的组件和开发工具下载:
黑羽ActionScript 2 组件&工具类
Flash 远程调试器1.0Beta
Action Script 2极有用的字符串处理函数补充【黑羽翔天】 (end) 类文件下载
AS2高级绘图工具类下载
注意!超简便的事件发送&管理器EventSender 1.5版发布 推荐
Flash实用loading工具KLoader新版1.5版本下载!KLoader ver 1.5 released!推荐
重磅献礼!KToolTip发布beta版!
2.简介
随着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;
}
ActionScript 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;
}
}
注意当编译时,上面的ActionScript 2类会变成ActionScript 1范例那样。
ActionScript 3
代码:
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;
}
}
}
ActionScript 3有怎样的不同呢?
ActionScript 3是不同的,非常的不同。因为不同在实际应用上所以需要一个全新的虚拟机来运行它。但是本质上,它仍是ActionScript,作为ActionScript你可能 已经注意到了在ActionScript 1和ActionScript 2中的许多命令和程序概念仍然非常好的适用于ActionScript 3.0.尽管上面的范例代码非常小,我们至少可以看出语法已经改变了。在某些地方ActionScript 3.0与ActionScript 2.0代码看上去非常相似但并不总是这样,最终在As2.0与As3.0中直接转换经常会比较困难。
这些改变是非常必要的,在印象中ActionScript 3.0有很高的功效,在开发过程中不仅是效率(这一点在一些小的但工作量较大的项目中得到证实)还有就是ActionScript 3.0在Flash Player中的回放速度要比ActionScript 2代码快10倍。好,你可能会发现在ActionScirpt 1和ActionScript 2中的许多并不复杂的任务在ActionScript 3.0中的代码长度会是原来的两倍长。但是最终你获得是它的高速和效率。对于那些经常使用代码的用户来说看到了希望,而对于高级的程序员来说将会高兴的跳起来。
下面是一些ActionScript 3中的新特性:
1.运行时排错—错误会运行时抛出以帮助你调试你的影片。
2.运行时变量类型检测—在回放时会检测变量的类型是否合法。
3.类封装—静态定义的类以增强性能。
4.方法封装—方法现在与它们相关的类实例绑定因此在方法中的’this’将不会改变。
5.E4X – 一个新的,更易于操作的xml
6.正规表达式—支持本地化正规表达式。
7.命名空间—不但在xml中支持命名空间而且在类的定义中也同样支持。
8.int和uint数据类型—新的数据变量类型允许ActionScript使用更快的整型数据来进行计算。
9.新的显示列表模式—一个新的,自由度较大的管理屏幕上显示对象的方法。
10.新的事件类型模式—一个新的基于侦听器事件的模式
在哪里输入Flash CS3代码
当你在Flash CS3中使用ActionScript 3.0书写代码时,你可能正在时间线上书写代码。如果你并没有在时间线上书写代码,那么你可以将你的代码书写在外部类文件中(也就是说你不能将代码直接写在fla文件中,现在你使用的是哪种方式呢?),在ActionScript 1和ActionScript 2中,你可以在时间线上写代码,也可以在选中的对象如按钮或是影片剪辑上书写代码,代码加入在on()或是onClipEvent()代码块中以及一些相关的事件如press或是enterFrame.这些在ActionScript 3.0都不在可能了。代码只能被写在时间上,所有的事件如press和enterFrame现在都很同样要写在时间线上。
Figure: 试图想在选中的对象上输入代码时出现的提示,不能应用代码。
变量
变量是在代码中描述或是容纳不同值或数据的名称。当你在ActionScript 3.0中声明变量时,你需要使用var关键词。
代码:
var myVariableName; // 需要使用var
从flash5版本开始,var 关键词就已经可用了,但是在现在的ActionScript 3中它是必须的。例外的情况是在定义动态对象实例的变量数据时。
代码:
myDynamicObject.newVar = value; // 不需要var
在上面的例子中,newVar在myDynamicObject对象中新定义的一变量,没有使用var关键词。实际上,var 关键词从来不在复杂引用中应用,或是任意需要点语法的引用中,或是使用[]引用的变量。
当定义一个变量时你必须使用数字,字符,$符号或下划线_来命名变量,你不能使用数字开头的名字来做为变量名称。如”bits32”,”_bits32”和"$bits32"都是合法的,“32bits”是不合法的因为它的名称之前使用了数字。
你需要确认你所创建的变量名没有和你现有的代码中的变量和代码内部预置变量没有冲突。例如,当你在时间线上书写代码时,你正在定义一个影片剪辑的实例名称,如果你试图将其定义成与flash内置的变量MovieClip名称相同,你将会得到一个错误。
代码:
// 任意的时间代码
var name:String = "Joe"; // 错误:与现有的内置变量名称冲突
同样,你不能在全局对象或是函数如Array,XML或是trace中使用。
注意:从Flash Player 7之后,ActionScript 开始区分大小写,因些变量Name和name是不同的。
ActionScript 3.0中还有一个新的地方是你只能在某一代码范围或是时间线代码上使用一次var,从另一个角度说,如你在一段代码的顶端声明了变量x,那么你不能在下面代码中的x变量使用var 关键词。
代码:
var x = value; // ok
…
var x = differentValue; // 错误:你只能使用一次var关键词。
当在Flash的时间线上定义变量时,它会应用在整个时间线上,而不只是当前的帧。
当使用var 关键词定义变量时,你可以为其指定变量类型,一个变量变量类型描述是它将存放的是哪种类型的数据。这个特性是从ActionScript 2.0开始的,一直继续到现在的ActionScript 3.0. 例如,如果你想让变量x是一个数值,那么你可以为它指定一个数值型如下。
代码:
var x:Number; // 变量x将用于承载数值型数据
在两个版本的ActionScript中,书写看上去是自由的,然而ActionScript 3 会在影片回放时保持书写信息的一些检查,不象在ActionScript 2.0中,在编译才会进行错误检查。这意味着你需要对你所使用的类型做出更多的判断,特别是你不能在ActionScript 3中针对一个变量使用两次var 关键词(而在ActionScript 2.0中将允许你针对同一变量使用不同的变量类型).
对于根本没有类型的变量来说,在ActionScript 3.0中你可以为其指定任意类型。它提供了一个特殊的类型”untyped”类型,它描述的是—没有类型。它的呈现方式是(*).
var anyValue:*; // 变量可以是任意的类型
为变量指定类型是个好的习惯,因为它可以引导更好的进行错误检查。在使用untyped类型时,你可以在指定为untyped类型加下一些说明,以便在其它人看代码时不至于去猜测。
如果你没有为一个变理提供一个默认的值,它将被系统默认的根据所设置的类型指定一个数值。如果没有设置变量类型,它将被指定一个undefined做为数值。下面列表中列出了在ActionScript 3.0不同的数据数据类型的默认值。
代码:
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
任何对象类型的默认值都是null.需要注意的object类型(任何对象包括arrays 和我们自定义类的对象)的默认值都是null,而不是undefinded。实际上在ActionScript中对象不能是undefined。如果他们没有值,那么他们就是空null。只有类型为untyped的变量或偿试访问的变量不存在时才会得一个undefined值。
Number类型现在有了一个唯一值,而不在是undefined或是null了。如果他们没有值,那么他们的值为NaN(“不是一个数值“)。NaN是一个比较巧妙的值,然而,你不能真正的拿一个NaN与另一个NaN去比较因为他们可能并不一样。如果你需要检查一个数值是否为NaN,你需要使用isNaN语法。
代码:
if (isNaN(myNumber)) //检查myNumber是否已定义.
Int和uint变量类型是ActionScript 3中新增的类型。它们是用来指定描述32位整形或整数的。Int类型是一个标准的整型,uint是一个未标记的整型,或不为负值的整数。这些数值只能是整数值,他们不能为空null,undefined,或是NaN。你可能已经注意到这两种类型的写法为int和uint,他们的第一个字母并没有大写,这意味着他们并不是特定指定给对象或是与类关联的类型,相反,这些类型本质上与Number类型共享(在MIN_VALUE和MAX_VALUE中的应用)
还有另外一个类型也没有首字母大写,这就是void类型,在ActionScript 2.0中它的首字母是大写的,但是在ActionScript 3中它的首字母不在大写了,类似于int和uint,并没有特殊的定义与其相关联。这种类型通常用于指定给函数。