Flash MX全程体验之二
脚本编译

Flash作品之所以好看,除了美工和制作的技巧,还有相当一部分的功能是要通过复杂的程序来实现的,在Flash 5中的ActionScript就让广大的设计者激动万分,面对Flash MX你一定迫不及待想要知道ActionScript又增加了哪些好东东!

1、加强动作面板功能

要编写ActionScript程序代码都是靠那非常重要的动作(Action)面板,为了满足程序设计师的要求,动作面板这次也改进不少:除了增加搜寻取代的功能外,还能自定程序语法颜色,最值得一提的是程序代码提示(Code Hints)的功能和参考(Reference)面板是相当有用的。有关这一切,在下面我将会为你简单解说。

2、加强除错器功能 (除错可以设定断点及逐步执行)

除了动作面板的程序编辑器外,除错器(Debug)面板也改进了不少:不但可以单步执行程序(Step In, Step Out, Step Over)、观察每个对象和变量的值,还可以设定断点(Breakpoint),让程序执行到某一步时自动停下来,监控当时的状态,对于大小型程序的除错都非常有用的。

3、改良后的对象模块

ActionScript语言的对象模块(Object Model)又有进一步改进,期望能更符合对象导向、写程序更方便,不仅有原本的Movie Clip对象,现在连按钮和文字字段都变成对象,也有更多的方法和属性可以使用。所以ActionScript目前所有的对象为:

(1)核心对象(Core Objects):包括Arguments,Array,Boolean,Date,Function,Math,Number,Objec和String。
(2)影片对象(Movie Objects):包括Accessibility,Button,Capabilities,Color,Key,Mouse, Movie Clip,Selection,Sound,Stage,System,TextField和TextFormat。
(3)网络通讯对象(Client/Server Objects):包括LoadVars,XML和XMLSocket。
(4)写作对象(Authoring Objects):包括CustomActions和Live Preview。
而其中Number,Boolean,Object,String,Array和XML对象还被最佳化过,成为原生(Native)对象,意思就是说这些对象的执行性能会比以前更好。

4、改良后的事件模块

事件模块(Event Model)也大幅的改进。现在有更多的事件让你控制更多的情况,尤其是鼠标和键盘相关的事件,目前ActionScript中所有的事件到后面会再详细解说。除了按钮和影片片段组件可以拥有事件处理外使用新增的Mouse.addListener和Key.addListener方法,几乎让大部分的组件都对鼠标和键盘的动作能够有相关的反应和处理,连声音对象都有onLoad和onSoundComplete事件。

而且现在的事件你不只可以这样编写:
  onClipEvent (mouseDown) {
  play();
  }
  还可以这样编写,效果都一样的:
  myMovie Clip.onMouseMove = function () {
  play();
  };

5、新的绘图API

Movie Clip 对象新增了许多关于绘图方面的方法,通过这些方法你就可以使用ActionScript轻易编写出一个比小画家还棒的Flash动画也说不定呢!关于Movie Clip对象绘图方面的方法有下面这些:

(1)Movie Clip.beginFill:开始绘画填色对象。
(2)Movie Clip.beginGradientFill:开始绘画渐层填色。
(3)Movie Clip.clear:移除所有和此 Movie Clip 关联的绘图指令。
(4)Movie Clip.curveTo:使用目前的笔画样式绘画曲线。
(5)Movie Clip.endFill:停止由beginFill和beginGradientFill所开始的绘画动作。
(6)Movie Clip.lineStyle:定义笔画样式给lineTo和curveTo使用。
(7)Movie Clip.lineTo:使用目前的线条样式绘画直线。
(8)Movie Clip.moveTo:移动目前的绘图点位置坐标。

下面我将用个实例来介绍,下面的ActionScript程序代码会画出一个半透明的四边形:

_root.createEmptyMovie Clip("newBox", 1);
  with (_root.newBox) {
  beginFill(0x00ff00, 60);
  moveTo(100, 100);
  lineTo(100, 300);
  lineTo(300, 300);
  lineTo(300, 100);
  lineTo(100, 100);
  endFill();
  }
  而这段程序代码则会画一个有外框线的圆形:
  _root.createEmptyMovie Clip( "newCircle", 3 );
  with ( _root.newCircle ) {
  lineStyle( 4, 0x666666, 60 );
  beginFill( 0xff0000, 60 );
  moveTo( 300, 400 );
  curveTo( 400, 400, 400, 300 );
  curveTo( 400, 200, 300, 200 );
  curveTo( 200, 200, 200, 300 );
  curveTo( 200, 400, 300, 400 );
  endFill();
  }


6、完全等于符号

在ActionScript中一个等号(=)是指定值给变量或对象的符号,两个等号(==)则是逻辑上判断两个值是否相等的符号,那么三个等号呢(===)?神奇了吧!三个等号就要逻辑上判断两个值是否真的完全相等的符号,而且不只是数值相等,连数据类型都要一模一样才行(它不会自动帮你转换数据类型),条件更严格。不过有三个附带条件:
(1)Numbers和Boolean对象只要数值相等就算完全相等。
(2)两个字符串要完全相等,必须字符数相同,而且里面每个字符都相同。
(3)两个变量要相等,该变量至少必须代表相同的对象、数组或函数。而两个数组是绝对不会完全相等的,就算是拥有同样数目的数组元素也一样。

你不妨试试判断下面这些状况,看你是否弄清楚了:

s1 = new String("5");
  s2 = new String("5");
  s3 = new String("Hello");
  n = new Number(5);
  b = new Boolean(true);
  s1 == s2; // 结果是true
  s1 == s3; // 结果是false
  s1 == n; // 结果是 true
  s1 == b; // 结果是false
  s1 === s2; // 结果是true
  s1 === s3; // 结果是false
  s1 === n; // 结果是false
  s1 === b; // 结果是false
  s1 !== s2; // 结果是false
  s1 !== s3; // 结果是true
  s1 !== n; // 结果是true
  s1 !== b; // 结果是true

7、时间排程函数

setInterval和clearInterval这两个也是新增的函数,它们的作用就是让你每经过某一段时间就去呼叫执行另一个自定函数,有点像是Windows的工作排程:例如你可以每隔30秒更新一次影片中的变量或资料、每隔5分钟换一张图片或播放动画效果之类的。setInterval是设定排程,那 clearInterval 就是取消之前所设定的排程。

setInterval的用法为:
setInterval( function, interval[, arg1, arg2, ..., argn] ) //或是setInterval( object, methodName, interval[, arg1, arg2, ..., argn] )而 clearInterval 必须搭配 setInterval 使用,例如:
  function callback() {
  trace("interval called");
  }
  var intervalID;
  intervalID = setInterval( callback, 1000 );
  // 一些其它的程序代码…
  clearInterval( intervalID );