
第五章循环程序结构.ppt
21页第五章 循环程序结构 ActionScript语言中通过四种语句实现程序的循环,分别是while、do….while,for循环和for in循环语句它们与if语句的最大区别在于,只要条件成立,循环里面的程序语句就会不断的执行而if语句中的程序代码只可能被执行一次5.1 while循环语句while语句的一般形式为:While(条件){语句1;语句2;……} 执行循环里面的语句之前,while先判断条件是否成立,如果条件成立,如果条件成立,则先从“{”开始的程序模块执行,执行到模块的结尾“}”时,会再次检查条件是否依旧成立,如此反复执行直到条件不成立为止范例5-1:求1+2+3+……+100的和(1)新建一个Flash文档2)选中第一帧,打开“动作”面板,输入下列代码:§var i = 1;//变量i用来控制循环§var sum = 0;§//sum表示求和的结果,初始值为0§while (i<=100) {§//当变量i的值小于等于100时§sum += i;§//sum不断加上1§i++;§//i递加§}§trace(sum);§//输出结果(3)测试影片 在上面的循环结构中,变量i的初始值为1,表达式i<=100为真,变量sum加上1,然后i加上1等于2,再进行条件i<=100判断,条件为真,这样循环执行,i一直自加到101,此时条件i<=100为假,结束循环。
这样程序共进行了100次循环 在循环结构中,应有使循环趋向于结束的语句如在本例的代码中,用变量i来控制,如果没有i的递加,循环将永不结束,如果一个程序执行时间超过15秒,Flash会提示错误信息在这段程序中,把i++写到循环条件的小括号中在Flash语句中是允许的,但是要注意循环的执行过程,如:§var i = 1;§var sum = 0;§while (i++<=100) {§sum += i;§}§trace(sum); 这段程序和前面的程序结果不一样 i++<=100的意思是,首先进行i<=100的判断,然后i加上1等于2,在执行sum+=2,首先从2开始计算,这是第一个问题所在当i=100时,条件还为真,i自加后等于101,因为这时条件还为真,还要执行sum+=101,这是第二个问题所在这段程序实际是求2到101的和,少加了一个1,多加了一个101 范例5-2:练习使用while语句,实现复制5个影片剪辑实例 打开源文件5-2.fla,在第一帧中加入如下代码:var i = 1;var num =5;while (i<=num) {duplicateMovieClip("ball", "ball"+i, i);this["ball"+i]._x = ball._x+i*40;i++;}这段代码的作用是复制5个影片剪辑实例,实例名分别为ball、ball2、…..ball5,并且设置这些实例的x坐标,让他们横相等距排列。
5.2 do…..while循环语句do…..while循环语句的一般形式为do{语句1;语句2;…}while(条件);和while循环命令相反,do…..while循环语句是一种先斩后奏的循环语句,不管怎样,do{}的语句至少会执行一次,然后再判断条件是否要继续执行循环如果while()里面的条件成立,它会继续执行do里面的程序语句,直到条件不成立为止5.3 for循环语句 for循环语句是功能最强大,使用最灵活的一种循环语句,它不仅可以用于循环次数已经确定的情况,还可以用于循环次数不确定而只给出循环结束条件的情况5.3.1 for循环语句的一般形式for循环语句的一般形式为for(初始表达式;条件表达式;递增表达式){程序}For语句中有三个表达式,中间用分号隔开第一个初始表达式通常用来设定语句循环执行次数的变量初值,这个表达式只会执行一次; 第二个条件表达式通常是一个关系表达式或者逻辑表达式,用来判定循环是否继续,第三个递增表达式是每次执行完“循环体语句”以后,就会执行的语句,通常就是用来增加或者减少变量的初值使用for语句计算1+2+..+100的循环程序如下:var sum=0for(i=1;i<=100;i+=1){sum=sum+i;}trace(sum)5.3.2使用for循环语句的注意事项 为了使程序的效率更高,在初始表达式中var关键字来声明变量,如:var sum=0for(var i=2;i<100;i+=2){//这里用var关键字来声明变量isum=sum+i;}trace(sum); 在初始表达式中可同时定义多个初始变量,两个表达式之间用逗号(,)隔开,如:for(var i=2,sum=0;i<100;i+=2){sum=sum+i;}trace(sum); 初始表达式也可以省略,但必须在for语句循环之前初始化变量,如:var i=2,sum=0;for(;i<100;i+=2){sum=sum+i;}trace(sum);当省略初始表达式时,其后的分号不能省略。
递增表达式也可以省略,但必须保证循环能正常结束,如:for(var i=2,sum=0;i<100;){sum=sum+i;i+=2;}trace(sum);程序中的i+=2用来结束循环 在for语句中,可以同时省略初始表达式和递增表达式,如:var i=2,sum=0;for(;i<100;){sum=sum+1;i+=2;}trace(sum); 这时的程序和while完全一样,所以可以用for语句代替while语句,也就是说,for语句的功能比while语句强大得多5.4 for…..in循环语句for…..in循环的作用是通过数组中对象或元素的属性,并为对象的每个属性执行一定的程序它的一般形式为for(变量名 in 数组或对象){程序;}例如:var person={name:”mary”,age:20};//定义一个对象person,包括两个属性name和age,其值分别为“mary”和20利用for……in循环还可以搜寻指定路径下的元件,如影片剪辑实例,按钮实例等范例5.5:让主场景中所有的影片剪辑实例停止播放(1)新建一个Flash文档。
2)在主场景中制作一个包含动作补间动画的影片剪辑实例,复制实例,随意分布在主场景中3)单击第一帧,打开动作面板,输入下列代码:§for (i in _root) {§if (typeof (_root[i]) == "movieclip") {§_root[i].stop();§}§}范例5.8:文字鼠标跟随特效(1)新建一个大小为400*300的Flash文档2)在场景中输入一个静态文本“鼠标跟随特效”,并将文字打散3)选中第一个文字“鼠”,将其转换为text1的影片剪辑元件,保持文字的选中状态,命名为text1(4)用同样的方法把其他文字转换为text2、text3、text4、 text5 、text6这时在库中应有六个影片剪辑元件(5)在主场景中新建一名为“as”的图层,插入三个空白关键帧,单击第一帧,打开“动作面板”,输入下列代码:§startDrag("text1", true);§//拖动第一个文字§var distance = text1._width;§//字符的间距为字符的宽度§var i = 6;§//定义一变量(6)单击第二帧,把帧标签设为loop,打开动作面板,输入下列代码:§while (i>1) {§this["x"+i] = this["x"+(i-1)]+distance;§this["y"+i] = this["y"+(i-1)];§i--;§}§//利用while循环,x6=x5,x4=x3...,y6=y5,y5=y4..§x1 = text1._x§y1 = text1._y;§//不断获取第1个实例的的坐标§while (i<=6) {§this["text"+i]._x = this["x"+i];§this["text"+i]._y = this["y"+i];§i++;§}§//利用while循环,分别设置字符的坐标,text6的坐标为(x6,y6)...§i--;§//循环结束后i=7,所以减1 通过这段代码,不断获取第一个文字的坐标,即鼠标指针的坐标,通过这个坐标来设置其他文字的坐标。
7)单击as图层的第三帧,打开动作面板,输入下列代码:gotoAndPlay(“loop”);//跳到第二帧,不断循环测试影片。
