while与 do while循环、循环语句的嵌套、组件.doc_第1页
while与 do while循环、循环语句的嵌套、组件.doc_第2页
while与 do while循环、循环语句的嵌套、组件.doc_第3页
while与 do while循环、循环语句的嵌套、组件.doc_第4页
while与 do while循环、循环语句的嵌套、组件.doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

8、FLASH脚本while与 do while循环、循环语句的嵌套、组件2010-09-26 16:05:57|分类:AS2.0课堂|标签:flash教程|字号订阅二十二、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) /5050代码执行过程:在上面的循环程序中,变量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 (i1000) i+/进行100次循环trace(getTimer()/1000-t+秒);/结束时间减去开始时间,即循环所需时间.用while语句优化代码大家还记得在第十四课中我们用加法赋值作了一个鼠标跟随效果, 当时每个字我们都要分别设置它的_x和_y。如果有10个字就要写20行语句,如果100个字呢,那不是就很麻烦吗?我们用while就可以把代码优化了。打开第十四课鼠标跟随特效源文件,把第1帧上的代码删除,选中第1个字的影片剪辑元件,打开动作面板,输入代码:onClipEvent (enter Frame) var i = 1;while (i=6) _root.mc1._x += (_root._xmouse-_x)/5;_root.mc1._y += (_root._ymouse-_y)/5;_rootmc+i._x += (_rootmc+(i-1)._x-_rootmc+i._x)/5+8;_rootmc+i._y += (_rootmc+(i-1)._y-_rootmc+i._y)/5;i+;/第六行“+8”是使每个字之间有距离,不至于象优化前一样重叠在一起-老虎注。说明:(1)如果字的个数增加了,只需改条件即可,例如是10个字,那么只需把条件i=6改为i=10就可以了。(2)由于我们用了enter Frame事件,所以第2帧就可以不要了。用while循环实现批量复制影片剪辑打开源文件(老虎电脑E盘“AS自学作业”中的“动态设置和获敢影片剪辑属性.fla”),场景第一帧加上代码:var i = 1;var num = 5;while (i=num) attachMovie(qiu, qiu+i, i);_rootqiu+i._x = Stage.width/6*i;_rootqiu+i._y = Stage.height/2_rootqiu+i+.txt = qiu+i;i+;这段代码作用是复制5个影片剪辑实例,实例名分别为qiu1、qiu2、qiu3、qiu4、qiu5,并实现横向等距离排列。要实现同样的效果,代码的写法有很多,如:var i = 0var num = 5;while (i+num) attachMovie(qiu, qiu+i, i);_rootqiu+i._x = Stage.width/6*i;_rootqiu+i._y = Stage.height/2;_rootqiu+i+.txt = qiu+i;或者这样写:var i = 1var num = 5;while (i=num) attachMovie(qiu, qiu+i+, i);_rootqiu+(i-1)._x = Stage.width/6*(i-1);_rootqiu+(i-1)._y = Stage.height/2;_rootqiu+(i-1)+.txt = qiu+(i-1);do while语句: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);区别while与do while语句(1) 选中第1帧,打开动作面板,输入下列代码;var i=1var j=5(2) 在场景中创建两个按钮实例,分别测试两种语句的结果,两个按钮上的语句分别为;on (press) while (ij) i+;trace(i);on (press) do i+ while (ij);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)在舞台上创建一个动态文本,变量名为:“str”(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+(k10 ? : )+(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; im; 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)打开素材源文件。(见老虎电脑E盘“AS自学作业”的“影片剪辑”文件夹:复制与删除)(2)选中复制按钮,打开动作脚本面板,添加代码:on (release) for (i=1; i=4; i+) for (j=1; j=4; j+) duplicateMovieClip(mc, mc+i+j, i*4+j);thismc+i+j._x = (i-1)*100+15; /花太靠左,故老虎在x坐标上加了15。thismc+i+j._y = (j-1)*100+20; /花太靠上,故老虎在y坐标上加了20。thismc+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,将该组件

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论