夜鹰教程网-程序员的加油站
 当前位置:文章中心 >> 技术辅导
入门Flash CS3 ActionScript 3.0
夜鹰教程网 来源:www.yyjcw.com 日期:2016-12-1 21:01:27
随着flash cs3的到来,同时提供给我们一个崭新的,针对Adobe Flash(swf)影片和功能程序的标准的程序开发语言。在之前的一段时间里,你可能发现入门ActionScript 3.0与其它版本的ActionScript相比会

随着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,并没有特殊的定义与其相关联。这种类型通常用于指定给函数。

+++++++++++++++++++++++++++++++++++++++++++++++++
函数

函数是用来定义可用的部分代码或是在ActionScript中的自定义运算。通过创建军函数你可以执行多次重复的运算,而不需要在你应用的过程中一遍一遍的重写相同的功能。
在ActionScript中有两中定义函数的方法,你可能使用下面的格式来创建一个指定名称的函数,如[functionName]([参数]){[some code]}或你可以定义一个没有指定名称的函数(匿名函数)使用如下的格式var[functionName]=function([参数]){[some code]}.两者本质上都是创建一个变量,Function函数为变量值,只是第二种方式看上去更直接而已。
代码:
 

// 指定名称的函数
function doubleNumber(num) {

      return num*2;

}
 
 

代码:
 

// 同样的没有指定名称的函数
var doubleNumber = function(num) {

      return num*2;

}
 
 

上面的例子中创建了一个名为doubleNumber的函数,它接受一个单一的数值,并返回乘以2的数值。如果要使用它,你使用()括号来调用它。如下。
代码:
 

var x:Number = 10;

trace(doubleNumber(x)); // traces 20
 
 

作为一个变量,命了名的函数一旦在时间轴上定义后将不能再被定义。
当为函数指定类型时,需要指定参数列表(你指定给函数的参数,多个参数用逗号隔开)和返回值的类型。当使用未命名函数时,变量名将被指定为Function类型。
代码:
 

// 命名函数

function doubleNumber(num:Number):Number {

      return num*2;

}
 
 


代码:
 

// 相同功能的未命名函数。
var doubleNumber:Function = function(num:Number):Number {

      return num*2;

}
 
 

如果一个函数没有返回值,那么它返回的类型将是void.当一个类型为void的函数被执行,或使用返回命令返回数值失败时,它的返回值变为undefined.
代码:
 

function returnsNothing():void {

      // do nothing

}

trace(returnsNothing()); // trace的结果为undefined.
 
 

上面的returesNothing()函数不光没有返回任何内容,而且也不接收任何数值---它没有参数列表。在ActionScript3中如果你试图向一个没有参数列表的函数中传递参数,你将会得到一个错误。
代码:
 

returnsNothing(3); // 错误:不正确的参数值
 
 

在ActionScript 2中,Void类型被用于做为函数的参数列表定义,用来标识此函数没有参数。在ActionScript 3.0中,你只将要参数列表留空即可。
注意:parameters和arguments是不同的,parameters(参数)是用在函数的定义中。Arguments是在函数中应用的真正的值。你可以把arguments看作是参数值。
在ActionScript 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


 
  那么如何让一个函数在调用时可以有任意数量的参数呢?,在ActionScript 2.0中,你只需要简单的删去参数列表然后通过引用arguments对象即可。在ActionScript 3.0中,已经没有了真正的参数列表,这意味着使用任何argument的函数将无法被调用。取而代之的是,你不得不使用一个新的参数类型为…(rest其它).它放置在你的参数列表之后(或者它就是你的整个参数),当调用函数时你可以使用任意数量的参数。…(rest)参数要被写成如下格式…[argumentsArrayName],arrgumentsArrayName是一个数组,它用来承载所传递的参数。
代码:
 

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 
 
  注意:当使用…(rest)参数时,当函数调用时arguments对象不在可用了。取而代之的是…(rest)参数用来获得传递的参数。然而…(rest)并不象早期版本的arguments,它不在有caller属性来引用当前的函数。在ActionScript 3.中,arguments和…(rest)两者都没有callee属性来引用当前所调用的函数。(callee 在ActionScript2.0中的arguments 对象中是可用的,但是ActionScript 3.0中已移除).

 

复制链接 网友评论 收藏本文 关闭此页
上一条: 常见定制系统开发  下一条: flex code
夜鹰教程网成立于2008年,目前已经运营了将近 13 年,发布了大量关于 html5/css3/C#/asp.net/java/python/nodejs/mongodb/sql server/android/javascript/mysql/mvc/easyui/vue/echarts原创教程。 我们一直都在坚持的是:认证负责、一丝不苟、以工匠的精神来打磨每一套教程,让读者感受到作者的用心。我们默默投入的时间,确保每一套教程都是一件作品,而不是呆板的文字和视频! 目前我们推出在线辅导班试运营,模式为一对一辅导,教学工具为QQ。我们的辅导学科包括 java 、android原生开发、webapp开发、商城开发、C#和asp.net开发,winform和物联网开发、web前端开发,但不仅限于此。 普通班针对的是国内学员,例如想打好基础的大学生、想转行的有志青年、想深入学习的程序员、想开发软件的初学者或者业余爱好者等。 就业办针对即将毕业上岗的大四学生,或者打算转行的初级开发工程师。 留学生班针对的是在欧美、加拿大、澳洲、日本、韩国、新加坡等地留学的中国学子,目的是让大家熟练地掌握编程技能,按时完成老师布置的作业,并能顺利地通过考试。 详细咨询QQ:1416759661   夜鹰教程网  基于角色的权限管理系统(c-s/b-s)。
  夜鹰教程网  基于nodejs的聊天室开发视频教程
  夜鹰教程网  Git分布式版本管理视频教程
  夜鹰教程网  MVC+EasyUI视频教程
  夜鹰教程网  在线考试系统视频教程
  夜鹰教程网  MongoDB视频教程。
  夜鹰教程网 Canvas视频教程
  夜鹰教程网 报表开发视频教程
  热点推荐
FLASH加载xml,txt,swf实例代码
Flash,Actionscript,AS延时执行语…
入门Flash CS3 ActionScript 3.0
播放器的制作方法
JavaScript控制Flash播放器的方法…
FLASH变量和作用域[这是一篇比较好…
用FLASH8.0轻松制作简易计算器
FLASH动画禁止右键菜单
FLASH AS教程:响应键盘事件的四种…
最常用的Flash语句(汇总)
Flash制作坦克游戏视频教程
创建FLEX自定义组件(1)
FLASH与ASP通信原理入门
Flash教程:加载外部文本文件的3种…
创建FLEX自定义组件(3)
  最近更新
在线考试系统
常见项目开发
学生公寓管理系统的设计与实现
校园电话查询系统设计与实现
校园机动车停车位申请系统的设计与…
C#支付宝接口集成服务
常见项目开发
常用UML建模工具
FLASH加载xml,txt,swf实例代码
视频教程卡住的解决办法
播放器的制作方法
常见定制系统开发
入门Flash CS3 ActionScript 3.0
flex code
Flex 开发架构渐变

关于我们 | 网站建设 | 技术辅导 | 常见问题 | 联系我们 | 友情链接

夜鹰教程网 版权所有 www.yyjcw.com All rights reserved 备案号:蜀ICP备08011740号3