第2篇 ActionScript 3.0语法篇
第3章 ActionScript 3.0基础
ActionScript 3.0是在Flash Player运行环境下的编程语言,是一种面向对象的语言。在Flex工程中,使用ActionScript 3.0语言作为编程语言。应用程序的功能实现全部依赖于ActionScript 3.0。本章将介绍如何在Flex工程中使用ActionScript 3.0。
3.1 ActionScript 3.0概述
ActionScript 3.0是运行于Flash Player运行环境的编程语言,使用新的ActionScript虚拟机AVM 2。AVM 2使用新的二进制指令集,并在性能上有很大改进。同时,ActionScript 3.0使用面向对象模型,扩展和提高了应用程序接口。ActionScript 3.0代码被Flex Builder或Flash中的编译器编译成二进制数据。这种二进制数据被装入SWF文件中,然后运行于Flash Player运行环境中。
ActionScript 3.0继承之前的ActionScript版本,并有了较大的更新。ActionScript 3.0中包含大量的数据、对象和可重用代码,能开发出更加复杂的应用程序,且执行效率大大提高。
虽然ActionScript 3.0包含的许多类和组件与之前的版本名称相同,但是类和组件在ActionScript 3.0中更结构化,这与之前的ActionScript版本还是有很大的不同。此外,ActionScript 3.0中许多核心类新增了许多属性和方法,Flash Player API中也新增了许多对底层对象的控制。
3.2 使用ActionScript 3.0
Flex工程中可有两种方式使用ActionScript 3.0代码:一种是在MXML文件的<mx:Script>标签下使用ActionScript 3.0代码,另一种是直接在AS文件中编写ActionScript 3.0代码。
3.2.1 在MXML文件中直接编写ActionScript 3.0
在MXML文件中编写ActionScript 3.0代码,只要在MXML文件下插入<mx:Script>标签。语法如下所示:
<mx:Script> <![CDATA[ //ActionScript 3.0代码 ]]> </mx:Script>
以下代码在MXML文件中的<mx:Script>标签下使用ActionScript 3.0。
<mx:Script> <![CDATA[ public function a():void //ActionScript 3.0代码 { var i:int=100; } ]]> </mx:Script>
· 在Flex Builder 3的编辑器中输入标签会自动封闭。例如,输入“<mx:Script>”后,自动生成封闭区域“<mx:Script><![CDATA[ ]]></mx:Script>”。
3.2.2 在AS文件中编写ActionScript 3.0
ActionScript Class、ActionScript File和ActionScript Interface都属于AS文件。三者的文件格式都为AS格式,不同的只是其中的定义有所区别。Flex应用程序中最常使用的AS文件是ActionScript Class,也就类的定义。用户可使用ActionScript Class创建向导来完成创建。创建ActionScript Class的步骤如下所示:
步骤1单击“File”|“New”|“ActionScript Class”命令,弹出“New ActionScript Class”对话框,如图3-1所示。
图3-1 新建AS文件对话框
步骤2在“Package”文本框中输入类的包,“Name”文本框中输入类名。“Modifiers”单选框选择类的类型,其中“public”表示公有类,“internal”表示内部类。“Superclass”文本框中输入继承的子类,“Interfaces”多项文本区域添加要实现的接口。“Code generation options”多选区域中选择生成类时的一些设置。其中,“Generate constructor from superclass”表示生成继承于子类的构造函数,“Generate functions inherited from interfaces”表示生成继承于接口的函数,“Generate comments”表示生成注释。单击“Finish”按钮,完成类的创建。
步骤3使用创建类向导生成的AS文件会自动显示于代码编辑器中,如图3-2所示。
图3-2 使用创建向导生成的AS类
用户可在代码编辑器中继续编写ActionScript 3.0代码。如下示例是一个完整的AS类。
package com.asiatom.englishr.commands //ActionScript 3.0代码 { public class OpenVideoCommand { public function a():void { var i:int=100; } } }
除了ActionScript Class创建向导外,还有ActionScript File创建向导和ActionScript Interface创建向导。
3.2.3 MXML中引用AS文件
MXML文件中若要引用AS文件有两种方式:一种是引用使用<mx:Script>标签中的“source”属性,语法如下所示。
<mx:Script source="AS文件路径">
以下代码引用了一个名为“t.as”的AS文件。
<mx:Script source="t.as">
这种方式可看成是将MXML文件和AS文件分离,从而减小MXML文件的代码,提高重用性。
另外一种方法是引用ActionScript Class(类)。使用这种方法的前提是AS文件中定义的是一个类。引用类的语法如下所示。
import类所在的包;
以下代码引用了com.asiatom.englishr.commands包下的OpenVideoCommand类。
import com.asiatom.englishr.commands.OpenVideoCommand;
3.3 创建第一个ActionScript 3.0应用程序
用户可以使用Flash、Flex Builder、Dreamweaver等任何文本编辑器编写ActionScript 3.0代码(AS格式文件)。本小节介绍使用Flex Builder 3创建一个简单的ActionScript 3.0应用程序。
1.设计ActionScript 3.0应用程序
用户总会在创建前构思应用程序的功能,此ActionScript 3.0应用程序的构思如下所示。
(1)应用程序名叫“HelloWorld”。
(2)应用程序中将显示“Hello World!”文字。
(3)应用程序使用一个名叫“Greeter”的类。
(4)应用程序中可输入用户名,并判断用户名是否存在于已知的数组中。
2.创建HelloWorld工程和Greeter类
Flex Builder 3中的创建步骤如下所示:
步骤1单击“File”|“New”|“Flex Project”命令,弹出“New Flex Project”对话框。
步骤2在“Project”文本框中输入工程名“HelloWorld”,单击“Finish”按钮,完成工程的创建。
步骤3单击“File”|“New”|“ActionScript File”命令,弹出“New ActionScript File”对话框。
步骤4选择路径,输入文件名“Greeter.as”,单击“Finish”按钮,完成类的创建。
3.编写Greeter类
在代码编辑器中完成对Greeter类的代码编写。Greeter类的代码如下所示。
package { public class Greeter { public static var validNames:Array = ["Sammy"] "Frank", "Dean"]; //根据名字返回不同的内容 public static function sayHello(userName:String = ""):String { var greeting:String; if (userName == "") { greeting = "Hello. Please type your user name, and then press the Enter key."; } else if (validName(userName)) { greeting = "Hello " + userName + "."; } else { greeting = "Sorry, " + userName + ", you are not on the list."; } return greeting; } //检查名字是否在数组中 public static function validName(inputName:String = ""):Boolean { if (validNames.indexOf(inputName) > -1) { return true; } else { return false; } } } }
· validNames数组存储了合法的用户名。在Greeter类加载时,数组被初始化。
· sayHello方法根据用户的名称来返回结果字符串。若参数为空,返回提示输入用户名字符串。若用户名合法,返回“Hello username.”字符串。若用户名不合法,返回"Sorry,userName,you are not on the list."字符串。
· validNames.indexOf(inputName)检查数组中是否包含inputName变量中的值。若没有找到,返回-1。若找到,返回相应的位置。
4.HelloWorld.mxml文件中添加ActionScript 3.0代码
在MXML编辑器中编写HelloWorld.mxml文件。HelloWorld.mxml文件的完整代码如下所示。
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns="*" layout="vertical" creationComplete = "initApp()" > <!--ActionScript 3.0代码写入mx:Script中--> <mx:Script> <![CDATA[ public function initApp():void { //显示内容 mainTxt.text = Greeter.sayHello(); } ]]> </mx:Script> <mx:TextArea id = "mainTxt" width="400" backgroundColor="#DDDDDD" editable ="false" /> <mx:HBox width="400"> <mx:Label text="User Name:"/> <mx:TextInputid="userNameTxt"width="100%"enter="mainTxt.text= Greeter.sayHello(userNameTxt.text);" /> </mx:HBox> </mx:Application>
· <mx:Application>定义了应用程序容器。
· <mx:Script>中可包含ActionScript 3.0代码。
· <mx:TextArea> 用于显示用户的文本。
· <mx:Script> 中定义了一个initApp方法,此方法在应用程序加载时调用。initApp方法中设置mainTxt变量的text属性等于Greeter类的sayHello方法的返回值,也就是“Hello World!”。
· enter动作是当用户按下回车时执行,也就是当用户在输入框中输入数据后,按下回车时触发事件。
5.编译运行程序
按下Ctrl+F11快捷键,开始编译运行程序。运行效果如图3-3所示。
图3-3 第一个ActionScript 3.0程序运行效果图
3.4 小结
ActionScript 3.0是Flex应用程序中的编程语言,控制Flex应用程序的执行,完成应用程序的各项功能。在Flex工程中使用ActionScript 3.0有两种方法:一种是在MXML文件的<mx:Script>标签下,一种是在AS文件中。对于大型应用程序来说,代码与模型的分离能使得程序更简洁。另外,将ActionScript 3.0代码写入AS文件也提高了代码的重用性。用户可以使用<mx:Script>标签中的Source属性来指明引用的AS文件,也可以使用引用类的方法来使用AS类。本章最后以HelloWorld实例讲解如何使用ActionScript 3.0代码。