加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

FLASH脚本8

发布时间:2020-12-15 18:02:32 所属栏目:百科 来源:网络整理
导读:8、FLASH脚本-while与 do while循环、循环语句的嵌套、组件??二十二、while与 do while循环 在编程的许多问题中都要用到循环结构,比如要对 10 个数字的排序,两个数字之间的比较,如 果采用选择结构,进行的条件分支非常多,所以写的代码也相当长,利用循环结构
8、FLASH脚本-while与 do while循环、循环语句的嵌套、组件??二十二、while与 do while循环在编程的许多问题中都要用到循环结构,比如要对 10 个数字的排序,两个数字之间的比较,如 果采用选择结构,进行的条件分支非常多,所以写的代码也相当长,利用循环结构可快速解决 这个问题,大大提高程序的效率. ActionScript 语言中可通过四种语句实现程序的循环,分别是 while、do...while、for 循环和 for in 循环语句.它们与 if 语句的最大区别在于只要条件成立,循环里面的程序语句就会不 断地重复执行.而 if语句中的程序代码只可能被执行一次. while 的格式如下: while(条件表达式) { 循环体; } 说明:在运行语句块之前,首先测试条件表达式;如果该测试返回 true,则运行该语句块。 如果该条件为 false,则跳过该语句块,并执行 while 动作语句块之后的第一条语句。其流 程图如图所示. 通常当计数器变量小于某指定值时, 使用循环执行动作。 在每个循环的结尾递增计数器的值, 直到达到指定值为止。此时,件条表达式的返回值不再为 true,且循环结束。 求 1 + 2+ 3+…+100 的和 新建一个 FLASH 文档,在第一帧打开动作面板,输入下列代码: var i = 1; var sum = 0; while (i<=100) { sum += i; i++; } trace(sum) 代码执行过程: 在上面的循环程序中,变量 i 的初始值是 1,表达式 i<=100 为真,变量 sum 加上 1,然 后 i+1 等于 2。再进行 i<=100 的判断,条件真,sum 再加上 2,i 又加上 2 等于 3,这样 循环执行,i 一直自加到 101,此时条件 i<=100 为假,结束循环。这样程序共进行了 100 次判断,也就是进行了 100 次循环,100 次执行表达式 sum+=i,这样就算出了 1+2+3+… +100 和。 注意:在循环结构中,应该有使循环趋于结束的语句,在本例的代码中,用变量 i 来控制, i 不断递加到 101,使条件为假,结束循环。 在前面我们知道 enterFrame 事件也是循环执行的,但是循环结构的执行要快行多,我们通 过下面的小程控来测试 while语句的执行速度: var t = getTimer()/1000;//开始时间以秒为单位 var i = 0; while (i<1000) { i++ }//进行 100 次循环 trace(getTimer()/1000-t+"秒"); //结束时间减去开始时间,即循环所需时间. 用 while语句优化代码 大家还记得在第十四课中我们用加法赋值作了一个鼠标跟随效果, 当时每个字我们都要分别 设置它的_x 和_y。如果有 10个字就要写 20 行语句,如果 100 个字呢,那不是就很麻烦 吗?我们用 while就可以把代码优化了。 打开第十四课鼠标跟随特效源文件,把第 1 帧上的代码删除,选中第 1 个字的影片 剪辑元件,打开动作面板,输入代码: on ClipEvent (enter Frame) { var i = 1; while (i<=6) { _root.mc1._x += (_root._xmouse-_x)/5; _root.mc1._y += (_root._ymouse-_y)/5; _root["mc"+i]._x += (_root["mc"+(i-1)]._x-_root["mc"+i]._x)/5+8; _root["mc"+i]._y += (_root["mc"+(i-1)]._y-_root["mc"+i]._y)/5; i++; } } 说明: (1)如果字的个数增加了,只需改条件即可,例如是 10 个字,那么只需把条件 i<=6 改为 i<=10 就可以了。 (2)由于我们用了 enter Frame事件,所以第 2 帧就可以不要了。 用 while循环实现批量复制影片剪辑 打开源文件,场景第一帧加上代码: var i = 1; var num = 5; while (i<=num) { attachMovie("qiu","qiu"+i,i); _root["qiu"+i]._x = Stage.width/6*i; _root["qiu"+i]._y = Stage.height/2 _root["qiu"+i+".txt"] = "qiu"+i; i++; } 这段代码作用是复制5 个影片剪辑实例,实例名分别为 qiu1、qiu2、qiu3、qiu4、qiu5,并 实现横向等距离排列。要实现同样的交果,代码的写法有很多,如: var i = 0 var num = 5; while (i++<num) { attachMovie("qiu",i); _root["qiu"+i]._x = Stage.width/6*i; _root["qiu"+i]._y = Stage.height/2; _root["qiu"+i+".txt"] = "qiu"+i; } 或者这样写: var i = 1 var num = 5; while (i<=num) { attachMovie("qiu","qiu"+i++,i); _root["qiu"+(i-1)]._x = Stage.width/6*(i-1); _root["qiu"+(i-1)]._y = Stage.height/2; _root["qiu"+(i-1)+".txt"] = "qiu"+(i-1); } dowhile语句: do while 语句的格式 do { 循环体; } while(条件表达式) 说明:和 while 循环语句相反,do while 循环语句是一种先斩后奏的循环语句。不管怎样 do{“和”}之间的程序至少要执行一次,然后再判断条件是否要继续循环。如果 while()里 的条件成立,它继续执行 do 里面的程序语句,直到条件不成立为止。其流程图如图用 do while 语句求和 同样的累加问题:1+2+3+…+100,用 do while语句程序为: var i = 1; var sum = 0; do { sum = sum+i; i++; } while (i<=100); trace(sum); 程序中的 i 不一定只能加 1,可能加上任意数,比如求 100 以内的偶数之和,用这程这样 表示: var i = 1; var sum = 0; do { sum += i; } while ((i += 2)<=100); trace(sum); 区别 whi le与 dowhile 语句 (1) 选中第 1 帧,打开动作面板,输入下列代码; var i=1 var j=5 (2) 在场景中创建两个按钮实例,分别测试两种语句的结果,两个按钮上的语句分别为; on (press) { while (i<j) { i++; } trace(i); } on (press) {do { i++ } while (i<j); trace(i) } (3) 测试影片,不断地单击按钮 从输出面板可以看出,当程序第一次执行时,就是第一次单击按钮时,。结果都是一样,都 是数字 5。 但多单击一次时, while 语句结果还是 5, 而 do while 语句的测试结果不断加 1, 原因是 do while 语句先执行程序, 再进行条件判断, 所以从第二次单击按钮开始, 变量 i 就 加 1。 小结: while 与 do_while 结构都可以按照一定的条件循环执行循环体,wihle 结构先判定循环条件,当条件符合时就执行循环体,按顺序执行完循环体中的语句后,在返回 wihle 语句开始处,重新 判定条件,并以此规则进行循环操作,直到循环条件为 false时终止循环,转而执行 wihle 结构 下面的命令,与 wihle 结构不同的是 do_while 循环结构先执行循环体中的语句,然后判定循 环条件.这就是说 do_while循环结构无论条件是否符合,循环至少执行一次. ? ?? ? 二十三、循环语句的嵌套 一个循环体内包含另一个循环体结构,称为循环的嵌套.在这一讲中我们介绍 for 语句的嵌套、for 与while语句的嵌套。 二个for嵌套(乘法九九表) (1)在舞台上创建一个动态文本,变量名为: “sir” (2)插入“图层 2”在此第 1 帧输入代码: var str:String = ""; for (var i = 1; i<=9; i++) { for (var j = 1; j<=i; j++) { var k = i*j; str = str+i+"×"+j+"="+k+(k<10 ? " " : " ")+(j == i ? "n" : ""); } } 三个f or嵌套(求水仙花数) 提示:所谓的“水仙花数” ,是指一个三位数,其各位数字的立方和等于该数本身,例如:153 是一个,“水仙花数” ,因为 153 等于 1的立方加上 5 的立方加上 3 的立方。程序如下: var str:String = ""; var n = 0; for (var i = 1; i<=9; i++) { for (var j = 0; j<=9; j++) { for (var k = 0; k<=9; k++) { m = i*100+j*10+k; if(m == i*i*i+j*j*j+k*k*k) { n++; str = str+m+(n == 0 ? " " : " "); } } } } for语句可以和while语句嵌套使用。(因数分解) 下面我们做一个因数分解的程序。这个实例子 for 语句可以和 while语句嵌套。 (1) 在舞台上创建一个输入文本, 变量名为: “my_txt1”,再创建一个动态文本, 变量名为: “my_txt2” 。 (2) 创建两个按钮实例,分别用来做分解计算和清空 (3) 添加代码: “分解”按钮上的代码: on (release) { m = Number(my_txt1); var str:String = m+"="; var flag = 1; for (i=2; i<m; i++) { ? ?while (m%i == 0) { ? ? if (flag == 1) { ? ???str = str+""+i; ? ???flag = 0; ? ? } else { ? ???str = str+"×"+i; ? ? } ? ? m = m/i; ? ?} } if (m != 1) { ? ?str = str+"×"+m; } my_txt2 = str; } 清空按钮上的代码: on (release) { my_txt1 = ""; my_txt2 = ""; } 嵌套复制 (1)打开素材源文件。 (2)选中复制按钮,打开动作脚本面板,添加代码: on (release) { for (i=1; i<=4; i++) { for (j=1; j<=4; j++) { duplicateMovieClip("mc","mc"+i+j,i*4+j); this["mc"+i+j]._x = (i-1)*100; this["mc"+i+j]._y = (j-1)*100; this["mc"+i+j+".txt"] = "mc"+i+j; } } } (3)选中删除按钮,打开动作在板,添加代码: on (release) { for (i=1; i<=4; i++) { for (j=1; j<=4; j++) { removeMovieClip("mc"+i+j); } } } 说明:本课中的实例理论性较强,牵涉的数学知识较多 ? ?? ? 二十四、组件 组件是拥有已定义了参数的复杂影片剪辑,这些参数在文档创作时设置。通过参数的设置和使用,我们可以修改组件的外观和行为。每个组件都有自己的AS方法,允许我们设置和修改其选项。 ? ? FLASH提供几类组件,它包括数据组件、多媒体组件、UI组件。使用组件时,我们可以使用动作脚本方法添加组件,也可以按下Ctrl+F7组合键打开组件面板。 组件的添加和参数设置 使用组件面板来选择添加组件,按下Ctrl+F7组合键,打开组件面板,将需要的组件拖到场景中。打开属性面板,就可以在属性面板中的参数选项卡中为组件添加参数,并为组件命名和设置组件尺寸及位置。属性面板中的ComboBox组件参数选项卡如图所示 也可以按Alt+F7组合键打开组件检查器,如图所示,我们可以对组件进行设置。 建立ComboBox组件 下面通过使用组件面板来建立组件。 1、按下Ctrl+F7组合键,打开组件面板,选择UI组件类中的ComboBox组件,将它拖入场景中。 2、打开属性面板,在属性面板中的参数选项卡中为组件添加参数。选择labels项,单击labels右面的数据栏,弹出值对话框 3、在值对话框中输入数据项参数。 4、选择rowCount行数项,输入所需要的行数 测试效果 用程序指令控制组件 用程序指令处理组件时事件,有两种方法:一种使用on()函数控制组件,另一种使用Click组件侦听器控制组件。使用on()函数控制组件是FLASH传统的编程思想,容易理解和掌握。使用Click组件侦听器控制组件,是FLASH提倡使用的编程思想,这种方法更符合面向对象的编程特性,程序更安全,功能更强。 使用on()函数控制组件 1、建立组件对象。按下Ctrl+F7组合键,打开组件面板,选择UI组件类中的RadioButton组件,将它拖入场景中。 2、打开属性面板,在属性面板的参数选项卡中为组件添加参数。选择label数据项,在右面的数值栏中输入"选择" 3、对组件进行编程。选中组件,打开动作面板,输入帧指令: on(click){ trace("选择正确"); } 测试影片,单击"选择"按钮,将在输出面板中输出"选择正确"字样 使用组件侦听器控制组件 将上例中控制组件的on()函数去掉,改为使用组件侦听器控制组件 1、选中场景中的组件,打开属性面板,在属性面板左边,输入组件实例名为"hack"。 2、选择第一帧,输入帧指令: zt=new Object();//建立侦听器对象 zt.click=function(){ trace("选择正确"); };//为侦听器对象上的click定义一个函数 hack.addEventListener("click",zt);//将组件名为hack的组件注册到侦听对象 组件应用 利用组件制作选择题 1、按下Ctrl+F7组合键,打开组件面板,选择UI组件类中的RadioButton组件,将它拖入场景中。并复制一个RadioButton组件。在场景中建立选择题画面 2、选择左边的RadioButten组件,打开属性面板,在属性面板的参数选项卡中为组件修改参数。 在宽度栏输入60,将该组件的宽度改为60像素宽。 下面我们来解释下该组件的参数作用: da ta数据参数:在数据参数栏输入数据15,这个数据将会作为选择题的判断依据。 label标签参数:将标签参数改为"对"。 groupName组名参数:它是很重要的参数,拥有相同组名的单选按钮,同时只能有一个被选中,这样在同一组内就不会出现多个选择。在这个参数栏输入a1。 选择右边的RadioButten组件,在宽度栏同样输入60,将该组件的宽度改成了40像素宽。右边的label标签采纳数栏改成"错",数据栏da ta中输入数据"13",这个数据将会作为选择题的判断依据,在组名参数栏输入a1 3、选择右下方的文本框,打开属性面板,在左边的文本类型栏中选择动态文本,在文本类型栏下面输入文本框名为"txt" 4、插入新的图层,作为AS层,选中第一帧,输入帧指令: Listener=new Object();//建立侦听对象 Listener.click=function(hk){//建立侦听对象的click事件函数 if(15==hk.target.selection.da ta){//判断单选按钮组件中数据栏中的数值是不是等于15 txt.text="选择正确";//如果等于15,将"选择正确"赋予txt文本变量 }else{ txt.text="选择错误";//如果不等于15,将"选择错误"赋予txt文本变量 } }; a1.addEventListener("click",Listener);//将组名为"a1"的单选按钮注册到侦听对象

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读