云南师范大学计算机科学与信息技术学院教育技术学——杨金平
if (x == 9) { gotoAndPlay(15); }
if语句以if开始,其后紧跟一个比较表达式,比较表达式通常用一对括号括起来,再后面即是用大括号括起来当比较结果为true时要执行的代码。 2.else
对if语句可以进行扩展,使用else执行条件不成立(比较表达式为false)时的代码,如下所示: if (x == 9) { gotoAndPlay(15); } else {
gotoAndPlay(16); }
你也可以使用else if语句将if语句更推进一步,如下所示: if (x == 9) { gotoAndPlay(15); } else if (x == 10) { gotoAndPlay(16); } else if (x == 11) { gotoAndPlay(20); } else {
gotoAndPlay(25); }
你可以让if语句想要多长就有多长,你也可以使用else if语句对别的变量进行比较,如下所示: if (x == 9) { gotoAndPlay(15); } else if (y<20) { gotoAndPlay(16); } else {
gotoAndPlay(25); }
3.复合比较
你可以在一个if语句中对几个比较表达式的值进行判断,比如说你希望在x为9并且y为20时跳转到第10帧,可以使用如下所示的脚本: if ((x == 9) && (y == 20)) { gotoAndPlay(10); }
逻辑与运算符&&将两个比较表达式联接在一起成为一个复合表达式,当两个表达式的值都为true时复合表达式的值才为true。每个比较表达式都需要添加独立的括号以便Flash能正确识别。在Flash的早期版本中使用and执行逻辑与运算,现在已推荐不使用。
你也可以使用逻辑或运算符||将两个比较表达式联接在一起成为一个复合表达式,只要有一个表达式的值为true,复合表达式的值就为true。如下所示: if ((x == 7) || (y == 15)) { gotoAndPlay(20); }
21
云南师范大学计算机科学与信息技术学院教育技术学——杨金平
在该脚本中,只要x为7或者y为15,或者两者都成立,结果都是跳转到第20帧。只有当两者都不成立时,才不会执行gotoAndPlay命令。在Flash的早期版本中使用or执行逻辑或运算,现在已推荐不使用。 3.4.5 循环
ActionScript中的循环要比if语句稍微复杂一点。它的循环结构与C语言中的循环结构几乎是一致的。 1.for循环结构
for结构是主要的循环结构,其样式如下所示: for (var i = 0; i<10; i++) { trace(i); }
运行这段代码,随着局部变量I的改变,输出窗口中将显示数字0~9。 for结构中关键字for后面的括号中包含3个部分,它们之间用分号隔开。
第1部分声明一个局部变量,在本例中创建了一个局部变量i并将其设置为0。该部分只在循环体开始执行之前执行一次。
第2部分作为一个供测试的条件,在这里,测试i是否小于10。只要满足该条件,就会反复执行循环体。循环开始的时候i等于0,它是小于10的,所以循环得以执行。
第3部分是一个运算表达式,每完成一次循环都将执行该表达式一次。在这里,i每次递增1,然后转到第2部分对i的新值进行判断。
大括号中的部分是该循环的循环体,每执行一次循环都将执行其中的所有命令。我们来看看计算机是如何处理这个循环的。
声明变量i并将其值设为0;
判断条件i<10,结果为true,开始执行循环体;
现在i值为0,trace命令将i值发送到输出窗口,输出窗口显示0; 第1次循环结束,回到循环开始处,i在原来的基础上递增1,i值变为1; 判断条件i<10,结果为true,继续执行循环体; trace命令将i的值1发送到输出窗口;
然后i再加1,这样循环下去直到执行完10次循环; 回到循环开始处,i在原来的基础上递增1,i值变为10;
判断条件i<10,结果为false,结束循环,开始执行for结构后面的代码。 2.其他形式的循环结构
for循环是最常用的一种循环结构,除for循环之外还有while循环和do?while循环。 while循环的例子如下所示: i = 0;
while (i != 10) { trace(i); i++; }
while循环看起来似乎要比for循环简单一些,从结构上看甚至与if语句还有一些相似。只要while后面括号中的条件成立,循环就会一直进行下去,所以在while循环体中需要有改变条件的语句,以使条件最终能够为false,完成循环,如上例中的i++。 与while循环相似的是do?while循环,如下所示: i = 0; do { trace(i); i++;
22
云南师范大学计算机科学与信息技术学院教育技术学——杨金平
} while (i != 10);
除了测试条件的位置不同,while循环和do?while循环几乎是一样的。while循环在循环体之前测试条件,do?while循环在循环体之后测试条件,所以do?while循环至少要执行一次,而while循环有可能一次也不执行。 3.跳出循环
所有的循环结构都可以使用两个命令改变循环的执行流程,一个命令是break,另一个命令是continue。break命令终止循环,并跳到循环结构后面的语句处执行;continue命令终止本轮循环但不跳出循环,进而执行下一轮循环。
使用break和continue的例子都比较复杂,另外,还有一种特殊的for?in循环结构,在用到它们的时候我们再详细讲解。 3.4.6 函数
到现在为止,我们都是将脚本放在影片的第1帧中。如果程序相当复杂,再放在同一帧中就使脚本显得太庞大了。
函数使你可以组织需重用的代码,并放在时间轴中,例如: function myFunction(myNum) { var newNum = myNum+5; return newNum; }
函数以关键字function开头,function后面是函数名。与变量名相似,你可以指定自己的函数名,最好将函数名取得有意义一些。
函数名后面的括号容纳该函数的参数,所谓参数也是一个变量,它的值在调用该函数时予以指定。一个函数可以有若干参数,也可以没有参数。无论有没有参数,函数名后都应紧跟一对括号。
大括号中的部分是函数体,在函数体中创建了一个局部变量newNum,将myNum加5的结果设置为newNum的值。如果你将10作为参数传递给该函数,newNum的值就是15。
return命令仅用于函数中,使用return结束一个函数并返回函数值。此处,newNum是用return命令返回的函数值。
要使用函数,就需要调用它,如下所示: var a = myFunction(7);
该语句创建一个新的局部变量a,将7作为参数调用函数myFunction,并将函数返回的结果作为变量a的值。
被调用的函数开始运行,创建一个局部变量myNum,将7作为myNum的值,然后执行函数体内的代码,使用return命令将newNum的值12返回给函数的调用者。这时,a的值变为12。 函数最大的作用体现在它可以重复使用。如下所示的3行代码产生3个不同的结果: trace(myFunction(3)); trace(myFunction(6)); trace(myFunction(8));
运行以上代码,你将得到结果8、11和13。
使用函数还有一个好处就是可以只改变函数中的一处,从而影响所有调用该函数的命令。例如,将函数myFunction中的var newNum = myNum+5改成var newNum = myNum+7,上面3个调用该函数的命令的结果将变成10、13和15 3.4.7 点语法
ActionScript中一个很重要的概念是点语法。点语法也是很多面向对象的编程语言中用来组织对象和函数的方法。
假设你想求一个数的绝对值,Flash中有一个内置的绝对值函数,它包含在ActionScript的“对象”/“核
23
云南师范大学计算机科学与信息技术学院教育技术学——杨金平
心”/“Math”/“方法”中。要使用绝对值函数,首先要使用对象名,即Math,然后是方法名abs,它们之间用符号“.”隔开,具体表示方法如下所示: var a = Math.abs(-7);
点语法的另一个用途是指定影片剪辑的属性。如下面的语句将影片剪辑myMC的_alpha(透明度)属性设置为50%:
myMC._alpha = 50;
你还可以在影片剪辑中使用点语法定位根(root)中的一个全局变量。如果你在主时间轴中创建了一个全局变量globelVar,而要在影片剪辑中使用这个全局变量,可以使用如下的语句: trace(_root.globleVar);
如果你现在对对象、影片剪辑属性、层级之类的概念还不熟悉,不用着急,在以后的内容中我们将对它们进行更深入的讲解。 3.4.8 注释
我们可以在Flash的动作面板中添加注释,注释就是程序中并不参与执行的那些代码。它可以用来提醒你某些代码的作用,方便你组织和编写脚本。一个注释的例子如下所示: // 将影片剪辑myMC的透明度设置为50% myMC._alpha = 50;
该例的第1行是注释,注释以双斜线//开头,在//后面你可以输入任意的文本和符号,Flash会自动将注释部分用灰色标示。
上例是将注释专门放在一行中,你也可以将注释放在一行代码的后面,如下所示: myMC._alpha = 50; // 将影片剪辑myMC的透明度设置为50% 只要使用//符号,Flash就会忽略它后面的部分。 3.5 调试脚本
无论在编写程序时有多么细心,每个程序员都避免不了要调试程序。要学好ActionScript,你就得熟练掌握调试程序的方法。在Flash MX中调试程序有3种方法:逻辑推断、向输出窗口发送信息和使用脚本调试器。
3.5.1 逻辑推断
许多程序错误其实很简单,也很容易解决,并不需要专门的调试工具。当程序出现错误时,你应对错误出现在哪里有一个大致的把握。
就算你不知道问题出在哪里,但通过细心阅读代码,你也有可能找到它。你可以思考一下,你要实现的效果是什么?现在的效果与你的设想有多大差距?是什么原因造成了这种差距?修改哪些部分有望改正这种错误?经过反复思考、修改和调试,你对程序的理解就会不断加深,你的程序也会越来越趋于正确。 没有人比你更了解你自己的程序,所以对你来说,你编写的程序最先宜采用逻辑推断的方法进行调试。还有一些错误或漏洞隐藏得比较深,这就需要借助于调试工具。 3.5.2 输出窗口
输出窗口是一个简单而实用的调试工具,在程序中可以使用trace命令将特定的信息发送到输出窗口中,这些信息可以帮助你了解代码的运行情况。
前面我们已经介绍过输出窗口,这里就不再赘述了。 3.5.3 调试器
调试器是一个更专业的调试工具,它是Flash MX中的一个窗口,通过调试器可以查看影片中的各种数据以及ActionScript代码的运行情况。
选择“控制”→“调试影片”命令,或按快捷键Ctrl+Shift+Enter,开始调试影片。与测试影片不同的是,调试影片时多了一个调试器窗口
调试器窗口中包含很多窗格,在左边的窗格中可以检查Flash影片中不同类型的对象,右边的窗格显示影片中所有的ActionScript。
24