日前,Adobe公司发布了flash的最新版本Flash Professional 9 ActionScript 3.0 Preview,这是Flash 9的预览版,正式版本估计要到2007年才会推出,如图1所示。在这个版本中最为显著的改变就是增加了对ActionScript 3.0的支持,而界面和Flash 8相比并没有任何改动。Flash 9预览版只是为我们提供了一个ActionScript 3.0开发环境,相信在正式版中还有更多改变和新增功能。在本文中,我们将一起来体验使用Flash 9预览版编译ActionScript 3.0的新功能。
一、新增功能
使用Flash 9预览版可以让我们编译包含或者导入到Fla文件中的ActionScript 3.0脚本,利用直接添加在关键帧上或与库文件相关联的脚本实现场景内容的交互。在同时发布的Flash Player 9中新增了一个虚拟机(AVM),据说这个新增的虚拟机要比传统ActionScript代码的执行速度快10倍。
现在我们可以使用Flash 9预览版或者Flex Builder 2来创建编辑AS3.0了,在Flash 9中可以创建基于时间线的ActionScript 3.0文档,并能够使用它的一些特性,比如flash.display.MorphShape类,abobe.utils package,static text fields,scenes等等。
在Flash 9预览版中我们可以发现如下新功能:
1、新增Document class功能实现界面和代码的分离
在Flash 9中最新引入了一个叫做document class的功能,使用它可以定义与主时间线相关联的类。我们可以不再将AS代码写到时间线上,而是单独保存为一个独立的as文件,真正实现了界面和代码的分离,这不得不说这是一个革命性的创新。在我们初始化主时间线的同时,Document class也已经创建完成了。如果想要设置Document class属性,可以在文件的属性面板或Actionscript 3.0发布设置面板上设置,或执行“File/Publish Settings”菜单命令,在Publish Settings 对话框中选择“Flash”标签,选择ActionScript选项为ActionScript 3以后,单击其后的“Settings...”按钮即可打开ActionScript 3.0属性设置对话框,如图2所示。
图2 [+放大图片]
在ActionScript 3.0设置对话框中,可以直接在Document class选项中输入as3.0的文档名称,在Classpath中单击加号可以增加as文件所在的目录,单击减号则可以删除目录,单击Browse To Path则可以浏览存放as文件的目录。如果我们所创建的类在指定的路径中找不到,Flash 9会自动创建一个可以将元件实例化的类,如图4所示。
图4
我们可以和Flash 8中元件的链接属性进行对比,在Flash 9中已经不存在ID(标识符)了,而在Flash 8中还需要指定标识符,去掉这项操作以后会大大简化我们的工作,如图5所示。
图5
3、新增Errors and warnings(错误和警告)
对于ActionScript 3.0的错误和警告也增加了两个操作,执行“Edit/Preferences”菜单命令,在弹出的Preferences面板中,选择ActionScript选项,单击“ActionScript3.0 Settings”按钮,弹出ActionScript 3.0 Preferences对话框,在其中的Errors选项中包括Strict Mode和Warnings Mode两种模式,如图6所示。
图6 [+放大图片]
如果选择Strict Mode模式,在使用编译器编译ActionScript 3.0的过程中对待出现的问题会非常严格,会全部当做错误来处理,而不单单是对我们的警告;如果选择Warnings Mode模式,则会对出现的问题发出警告,这在我们转换Actionscript 2.0到Actionscript3.0时,会得到很大的帮助。如果选择了Warning Mode模式,我们还可以通过编辑EnabledWarnings.xml文件中的Enabled属性来自己定义警告,这个文件存放在Flash 9安装路径下en\Configuration\ActionScript 3.0中。 (2)单击“确定”按钮,进入as文件编辑界面,在代码编写窗口中输入以下代码:
package {
import flash.display.MovieClip;
import flash.text.*;
public class welcome extends MovieClip {
public function welcome() {
var display_txt:TextField = new TextField();
display_txt.width =300;
display_txt.height =50;
display_txt.x = 150;
display_txt.y = 150;
display_txt.htmlText = "欢迎访问www.PConline.com.cn";
addChild(display_txt);
}
}
}
执行“File/Save”菜单命令,将此文件保存为Welcome.as,此文件即为我们所需要的类文件,将它和Fla文件保存在同一个目录下。
(3)新建一个Fla文件,不需要做其他任何操作,只需在文档属性面板的Document class选项中输入刚制作好as文件名称welcome,如图8所示。
图8 [+放大图片]
按“Ctrl+Enter”组合键预览效果
,如图9所示。
图9
2、制作可以点击的对象
(1)新建一个Fla文档,命名为Simple.fla。使用矩形工具在工作区中绘制一个矩形,选中它以后按“F8”键,将矩形转换为Movie Clip,命名为Symbol。选中矩形元件,在属性面板中为矩形添加实例名为juxing,如图10所示。
(2)取消对矩形元件的选择,按F9键打开Actions面板,输入如下代码:juxing.addEventListener(MouseEvent.CLICK,clickHandler);
function clickHandler(event:MouseEvent):void {
trace("你点击我了哦");
}
在这段代码中juxing实例变为可以点击的对象了,因为我们加入了事件侦听(EventListener)来检测用户是否点击了对象,当用户点击juxing影片剪辑以后clickHandler()就会开始运行。在以前的版本中,则需要在组件中加入侦听事件,然后使用onPress()事件来检测用户是否点击了对象。
(3)如果将上面MouseEvent.CLICK变为MouseEvent.DOUBLE_CLICK则可以实现双击的效果
。不过由于MovieClip对于双击事件默认为false状态,所以需要首先将它变为True状态,加入juxing.doubleClickEnabled = true;就可以了,此时的代码如下:
juxing.doubleClickEnabled = true;
juxing.addEventListener(MouseEvent.DOUBLE_CLICK, clickHandler);
function clickHandler(event:MouseEvent):void {
trace("现在你可以双击我哦");
}
(4)按“Ctrl+Enter”组合键,预览效果。在你双击矩形时,会弹出一个窗口显示我们所设定的文字,如图11所示。
图11 [+放大图片]
如果想要实现鼠标移动到矩形上显示手形的效果,可以加入如下代码:
juxing.buttonMode = true;
3、制作可以拖动的对象
如果想让用户在影片中能够拖动矩形,可以为mouseDown和mouseUp加入两个事件侦听:mouseDown(MouseEvent.MOUSE_DOWN)和mouseUp(MouseEvent.MOUSE_UP)。
继续在上面的实例中进行操作,将其中的代码用如下部分替换:
juxing.buttonMode = true;
juxing.addEventListener(MouseEvent.CLICK,clickHandler);
juxing.addEventListener(MouseEvent.MOUSE_DOWN,mouseDownListener);
juxing.addEventListener(MouseEvent.MOUSE_UP,mouseUpListener);
function clickHandler(event:MouseEvent):void {
trace("你可以拖动并单击我哦");
}
function mouseDownListener(event:MouseEvent):void {
juxing.startDrag();
} function mouseUpListener(event:MouseEvent):void {
juxing.stopDrag();
}
测试一下效果,你会发现可以拖动矩形移动了,这样就完成了一个可以拖动对象的制作。
需要说明的是,假如再写一个这样可以被拖动的对象,利用外部的as文件实现简化,将上述代码封装到as文件中,在需要使用这种效果的时候将元件与类链接到一起就可以了,这将用到将代码转换成类的方法。
好了,现在就对Flash 9预览版的一些新功能做了简单介绍,关于Flash 9带给我们的新体验还需要我们进一步去挖掘