本帖最后由 awerva 于 2017-11-29 21:58 编辑
六. 条件/循环 : 条件语句和循环构造(二)
1. for
可用性 Flash Player 5 。用法 for( init; condition; next ) { statement(s); } 参数
init 一个在开始循环序列前要计算的表达式,通常为赋值表达式。此参数还允许使用 var 语句。 condition 计算结果为 true 或
false 的表达式。在每次循环迭代前计算该条件;当条件的计算结果为 false 时退出循环。 next
一个在每次循环迭代后要计算的表达式;通常为使用 ++ (递增)或 -- (递减)运算符的赋值表达式。 statement(s)
在循环体内要执行的指令。说明动作;一种循环结构,首先计算 init (初始化)表达式一次,只要 condition 的计算结果为 true
,则按照以下顺序开始循环序列,执行 statement ,然后计算 next 表达式。一些属性无法用 for 或 for..in
动作进行枚举。例如, Array 对象的内置方法( Array.sort 和)不包括在 Array 对象的枚举中,而影片剪辑属性,如 _x 和 _y
,也不能枚举。示例下面的示例使用 for 在数组中添加元素: for(i=0; i<10; i++) { array = (i +
5)*10; trace(array); } 在输出窗口中显示下列结果: 50 60 70 80 90 100 110 120 130 140
下面是使用 for 重复执行同一动作的示例。下面的代码中, for 循环将从 1 到 100 的数字相加: var sum = 0; for
(var i=1; i<=100; i++) { sum = sum + i; } 另请参见 ++ (递增) -- (递减) for..in var
2. for..in
可用性 Flash Player 5 。用法 for(v ariableIterant in object ){ statement(s); }
参数 variableIterant 作为迭代变量的变量名,引用数组中对象或元素的每个属性。 object 要重复的对象的名称。
statement(s) 要为每次迭代执行的指令。返回无。说明动作;循环通过数组中对象或元素的属性,并为对象的每个属性执行 statement
。一些属性无法用 for 或 for..in 动作进行枚举。例如, Array 对象的内置方法( Array.sort 和)不包括在 Array
对象的枚举中,而影片剪辑属性,如 _x 和 _y ,也不能枚举。 for..in 结构迭代所迭代对象的原型链中对象的属性。如果 child 的原型为
parent ,则用 for..in 迭代 child 的属性,也将迭代 parent 的属性。 for..in
动作枚举对象原型链中的所有对象。首先枚举该对象的属性,接着枚举其直接原型的属性,然后枚举该原型的原型的属性,依次类推。 for..in
动作对于同一属性名不枚举两次。如果对象 child 具有原型 parent ,而这两个对象都包含属性 prop ,则对 child 调用的
for..in 动作枚举来自 child 的 prop ,而忽略 parent 中的该属性。示例下面的示例使用 for..in 迭代某对象的属性:
myObject = { name:\'Tara\', age:27, city:\'San Francisco\' }; for (name in
myObject) { trace ("myObject." + name + " = " + myObject[name]); }
此示例的输出如下所示: myObject.name = Tara myObject.age = 27 myObject.city = San
Francisco 下面的示例将 typeof 运算符与 for..in 一起使用来迭代特定类型的 child : for (name in
myMovieClip) {if (typeof (myMovieClip[name]) = "movieclip") { trace ("I
have a movie clip child named " + name); } }
下面的示例枚举影片剪辑的子级,并将每个子级发送到其各自时间轴的第二帧。 RadioButtonGroup 影片剪辑是一个父级,它具有多个子级:
_RedRadioButton_ 、 _GreenRadioButton_ 和 _BlueRadioButton 。 for (var name
in RadioButtonGroup) { RadioButtonGroup[name].gotoAndStop(2); }
3. if
可用性 Flash Player 4 。用法 if( condition) { statement(s) ; } 参数 condition
计算结果为 true 或 false 的表达式。 statement(s) 如果或当条件的计算结果为 true
时要执行的指令。返回无。说明动作;对条件进行计算以确定影片中的下一步动作。如果条件为 true ,则 Flash 将运行条件后面花括号 ( {} )
内的语句。如果条件为 false ,则 Flash 跳过花括号内的语句,运行花括号后面的语句。使用 if
动作可在脚本中创建分支逻辑。示例在下面的示例中,括号内的条件对变量 name 进行计算以查看其是否具有文本值“ Erica
”。如果有,则运行花括号内的 play 动作。 if(name == "Erica"){ play(); } 示例下面的示例使用 if
动作计算用户何时释放影片中的可拖动对象。如果对象在拖动后 300 毫秒之内被释放,则条件的计算结果为 true
,并运行花括号内的语句。这些语句设置变量以存储对象的新位置、拖放对象的难易程度和拖放对象时的速度。 timePressed
变量也将被重置。如果对象在拖动后超过 300 毫秒之后被释放,则条件的计算结果为 false ,并且不运行任何语句。 if
(getTimer()<timePressed+300) { // if the condition is true, // the object
was thrown. // what is the new location of this object? xNewLoc = this._x;
yNewLoc = this._y; // how hard did they throw it? xTravel = xNewLoc-xLoc;
yTravel = yNewLoc-yLoc; // setting the speed of the object depending on //
how far they travelled with it xInc = xTravel/2; yInc = yTravel/2;
timePressed = 0; } 另请参见 else
4.
可用性 Flash Player 4 。用法tch ( expression){ caseClause : [ defaultClause :] }
参数 expression 任意表达式。 caseClause 一个 case 关键字,其后跟着表达式、冒号和一组语句,如果在使用全等 ( ===
) 的情况下,此处的表达式与tch expression 参数相匹配,则执行这组语句。 defaultClause 一个 default
关键字,其后跟着如果这些 case 表达式都不与tch expression 参数全等 ( === )
匹配时要执行的语句。返回无。说明动作;创建动作脚本语句的分支结构。像 if 动作一样,tch 动作测试一个条件,并在条件返回 true
值时执行语句。示例在下面的示例中,如果 number 参数的计算结果为 1 ,则执行 case 1 后面的 trace 动作,如果 number
参数的计算结果为 2 ,则执行 case 2 后面的 trace 动作,依此类推。如果 case 表达式都不匹配 number 参数,则执行
default 关键字后面的 trace 动作。tch (number) { case 1: trace ("case 1 tested
true"); break; case 2: trace ("case 2 tested true"); break; case 3: trace
("case 3 tested true"); break; default: trace ("no case tested true") }
在下面的示例中,第一个 case 组中没有 break ,因此如果 number 为 1 ,则 A 和 B 都被发送到输出窗口:tch
(number) { case 1: trace ("A"); case 2: trace ("B"); break; default trace
("D") } 另请参见 === (全等) break case default if
5. while
可用性 Flash Player 4 。用法 while( condition ) { statement(s) ; } 参数 condition
每次执行 while 动作时都要重新计算的表达式。如果该语句的计算结果为 true ,则运行 statement(s) 。 statement(s)
条件的计算结果为 true 时要执行的代码。返回无。说明动作;测试表达式,只要该表达式为 true
,就重复运行循环中的语句或语句序列。在运行语句块之前,首先测试 condition ;如果该测试返回 true ,则运行该语句块。如果该条件为
false ,则跳过该语句块,并执行 while
动作语句块之后的第一条语句。通常当计数器变量小于某指定值时,使用循环执行动作。在每个循环的结尾递增计数器的值,直到达到指定值为止。此时,
condition 不再为 true ,且循环结束。 while 语句执行下面一系列步骤。步骤 1 至 4
的每次重复叫做循环的“迭代”。在每次迭代的开始重新测试 condition ,如下面的步骤所述: 1 计算表达式 condition 。 2 如果
condition 的计算结果为 true ,或者一个可转换为布尔值 true 的值(比如一个非零数字),则转到步骤 3 。否则, while
语句结束,并从 while 循环之后的下一语句恢复执行过程。 3 运行语句块 statement(s) 。 4 转到步骤 1
。示例此示例在舞台上复制五个影片剪辑,每个影片剪辑具有随机生成的、位置; xscale 、 yscale 以及 _alpha 属性以达到分散的效果。
. 变量 foo 初始化为值 0 。设置 condition 参数使 while 循环运行五次,即只要变量 foo 的值小于 5 就运行。在
while 循环中,复制影片剪辑,并使用 setProperty 调整所复制影片剪辑的各种属性。循环的最后一条语句递增 foo ,以便当该值达到 5
时, condition 参数计算结果为 false ,从而不再执行该循环。 on(release) { foo = 0; while(foo <
5) { duplicateMovieClip("_root.flower", "mc" + foo, foo); setProperty("mc"
+ foo, _x, random(275)); setProperty("mc" + foo, _y, random(275));
setProperty("mc" + foo, _alpha, random(275)); setProperty("mc" + foo,
_xscale, random(200)); setProperty("mc" + foo, _yscale, random(200));
foo++; } } 另请参见 do while continue for for..in
4.
可用性 Flash Player 4 。用法tch ( expression){ caseClause : [ defaultClause :] }
参数 expression 任意表达式。 caseClause 一个 case 关键字,其后跟着表达式、冒号和一组语句,如果在使用全等 ( ===
) 的情况下,此处的表达式与tch expression 参数相匹配,则执行这组语句。 defaultClause 一个 default
关键字,其后跟着如果这些 case 表达式都不与tch expression 参数全等 ( === )
匹配时要执行的语句。返回无。说明动作;创建动作脚本语句的分支结构。像 if 动作一样,tch 动作测试一个条件,并在条件返回 true
值时执行语句。示例在下面的示例中,如果 number 参数的计算结果为 1 ,则执行 case 1 后面的 trace 动作,如果 number
参数的计算结果为 2 ,则执行 case 2 后面的 trace 动作,依此类推。如果 case 表达式都不匹配 number 参数,则执行
default 关键字后面的 trace 动作。tch (number) { case 1: trace ("case 1 tested
true"); break; case 2: trace ("case 2 tested true"); break; case 3: trace
("case 3 tested true"); break; default: trace ("no case tested true") }
在下面的示例中,第一个 case 组中没有 break ,因此如果 number 为 1 ,则 A 和 B 都被发送到输出窗口:tch
(number) { case 1: trace ("A"); case 2: trace ("B"); break; default trace
("D") } 另请参见 === (全等) break case default if
5. while
可用性 Flash Player 4 。用法 while( condition ) { statement(s) ; } 参数 condition
每次执行 while 动作时都要重新计算的表达式。如果该语句的计算结果为 true ,则运行 statement(s) 。 statement(s)
条件的计算结果为 true 时要执行的代码。返回无。说明动作;测试表达式,只要该表达式为 true
,就重复运行循环中的语句或语句序列。在运行语句块之前,首先测试 condition ;如果该测试返回 true ,则运行该语句块。如果该条件为
false ,则跳过该语句块,并执行 while
动作语句块之后的第一条语句。通常当计数器变量小于某指定值时,使用循环执行动作。在每个循环的结尾递增计数器的值,直到达到指定值为止。此时,
condition 不再为 true ,且循环结束。 while 语句执行下面一系列步骤。步骤 1 至 4
的每次重复叫做循环的“迭代”。在每次迭代的开始重新测试 condition ,如下面的步骤所述: 1 计算表达式 condition 。 2 如果
condition 的计算结果为 true ,或者一个可转换为布尔值 true 的值(比如一个非零数字),则转到步骤 3 。否则, while
语句结束,并从 while 循环之后的下一语句恢复执行过程。 3 运行语句块 statement(s) 。 4 转到步骤 1
。示例此示例在舞台上复制五个影片剪辑,每个影片剪辑具有随机生成的、位置; xscale 、 yscale 以及 _alpha 属性以达到分散的效果。
. 变量 foo 初始化为值 0 。设置 condition 参数使 while 循环运行五次,即只要变量 foo 的值小于 5 就运行。在
while 循环中,复制影片剪辑,并使用 setProperty 调整所复制影片剪辑的各种属性。循环的最后一条语句递增 foo ,以便当该值达到 5
时, condition 参数计算结果为 false ,从而不再执行该循环。 on(release) { foo = 0; while(foo <
5) { duplicateMovieClip("_root.flower", "mc" + foo, foo); setProperty("mc"
+ foo, _x, random(275)); setProperty("mc" + foo, _y, random(275));
setProperty("mc" + foo, _alpha, random(275)); setProperty("mc" + foo,
_xscale, random(200)); setProperty("mc" + foo, _yscale, random(200));
foo++; } } 另请参见 do while continue for for..in
六. 用户定义的函数 : 创建和调用函数的动作
1. call
可用性 Flash Player 4 。在 Flash 5 中已不鼓励使用此动作,推荐改用 function 动作。用法 call( frame )
参数 frame
时间轴中帧的标签或编号。返回无。说明动作;执行被调用帧中的脚本,而不将播放头移动到该帧。一旦执行完该脚本,局部变量将不存在。另请参见
function
2. function
可用性 Flash Player 5 。用法 function functionname ([ parameter0,
parameter1,...parameterN ]){ statement(s) } function ([ parameter0,
parameter1,...parameterN ]){ statement(s) } 参数 functionname
新函数的名称。一个标识符,表示要传递给函数的参数。这些参数是可选的。 statement(s) 为 function
的函数体定义的任何动作脚本指令。返回无。说明动作;您定义的用来执行特定任务的一组语句。可以在影片的一个地方“声明”或定义函数,然后从影片的其他脚本调用它。定义函数时,还可以为其指定参数。参数是函数要对其进行操作的值的占位符。每次调用函数时,可以向其传递不同的参数。这使您可以在不同场合重复使用一个函数。在函数的
statement(s) 中使用 return 动作可使函数返回或生成一个值。用法 1 :用指定的 functionname 、
parameters 和 statement(s) 声明一个 function
。当调用函数时,则调用函数声明。允许提前引用;在同一“动作”列表中,函数可以先调用后声明。一个函数的声明会替换同一函数以前的任何声明。只要是允许使用语句的地方就可使用此语法。用法
2 :创建一个匿名函数并返回它。此语法用于表达式中,对于在对象中安装方法尤其有用。示例用法 1 :下面的示例定义函数 sqr
,该函数接受一个参数并返回该参数的 square(x*x) 。请注意,如果在同一脚本中声明和使用函数,则可以先使用该函数,后声明它。
y=sqr(3); function sqr(x) { return x*x; } 用法 2 :下面的函数定义一个 Circle 对象:
function Circle(radius) { this.radius = radius; }
下面的语句定义一个匿名函数,该函数计算圆形的面积,并将其作为方法附加到对象 Circle : Circle.prototype.area =
function () {return Math.PI * this.radius * this.radius}
3. return
可用性 Flash Player 5 。用法 return[ expression ] return 参数 expression
要作为函数值计算并返回的字符串、数字、数组或对象。此参数是可选的。返回如果提供了 expression
参数,则返回计算的结果。说明动作;指定由函数返回的值。 return 动作计算 expression 并将结果作为它在其中执行的函数的值返回。
return 动作导致函数停止运行,并用返回值代替函数。如果单独使用 return 语句,它返回 null 。示例下面的示例在 sum 函数体内使用
return 动作,以返回三个参数相加后的值。下一行代码调用 sum 函数并将返回值赋予变量 newValue : function sum(a,
b, c){ return a + b + c; } newValue = sum(4, 32, 78); trace(newValue); //
sends 114 to the Output window 另请参见 function |