Flash as2.0代码大全与Flash 制作技巧一、注释// 单行注释符/* */ 多行注释符/*开始,*/结束二、转义字符结果输出: HelloActionScript2.0实例:获得系统的事件2:var time = new Date();//创建Date 类的实例(Date 类的实例含系统时间的所有信息);注意var 中的字母v 是小写的。
var yy = time.getFullYear(); var mm = time.getMonth()+1;/*getMonth 比较特殊,它返回的值是0-11之间的数值, 所以必须要加上1*/ var dd = time.getDate();var xq = time.getDay(); //返回值为0,周末 var hh = time.getHours(); var min = time.getMinutes(); var ss = time.getSeconds();trace(yy+"年/\n"+mm+"月\n"+dd+"日\n"+"星期"+xq+"\n"+hh+"点\n"+min+"分\n"+ss+"秒") //换行符号 必须在引号里边才可以a=yy+"年"+mm+"月"+dd+"日"+"星期"+xq+hh+"点"+min+"分"+ss+"秒"三、声明方式及获取类型1.变量的声明方式,数字于字符串数字相加的规则数字声明的方式var a:String="12" ; //声明变量a 是一个字符串类型,为12var b:Number=34 ; //声明变量b 是一个数字字符串类型,为34 var c=a+b ; //声明变量c=a+btrace(c); //字符串类型和数字类型的变量相加时,数字型被转换成字符串再相加 输出结果:12342.实例:确定变量的数据类型 typeof var m="12"; trace(typeof(m)); m=2;trace(typeof(m))输出结果:string number3.改变数据的类型:数字Number()、字符串String()、逻辑是否Boolean 、对象数据类Object()、数组Array(); var a ="12" ; //声明变量a 是一个字符串类型,为12转义序列 \b\f\n\r\t\ "\'\\字符退格符(ASCII8)换页符(ASCII12)换行符(ASCII10)回车符(ASCII13)制表符(ASCII9)双引号单引号反斜杠var b=Number(a); //将a 转换为数字类型,赋予b trace(typeof(b)+":"+b)输出结果:number:12四、运算符1.点运算符:用来连接对象与嵌套再对象中的子对象,以及访问对象于对象的属性和方法。
例:this.stop //当前对象停止 2.数值运算符3.比较运算符例: x="100" y=100z1=(x==y)z2=(x===y) //z1 、z2对两个式子进行判断,如果是正确的,则为true ,如果为错误的则为false trace(z1+"/"+z2) 输出结果:true/false 4.字符串运算符 ++进行连接时,对于不是字符串类型的数值,先将其转换成字符串,再进行连接。
如果要将两个数字类型的数字进行连接,可以借助空字符串 例:m=12+34; n=""+12+34trace("m="+m+"\nn="+n) //输出结果 m=46 换行 n=1234 5.逻辑运算符例:if (age>60 || age<14 && !(h>1.1)) { //身高不超过1.1,年龄小于14大于60的免票 trace("免票"); //输出结果:免票} //先执行逻辑非!,然后是逻辑与&&,然后是逻辑或‖ 6.赋值运算符a=条件 ? 数值1:数值2 //如果条件满足,则为值2,如果不满足,则为数值1h=2;a=age>60||h<1.1?5:10trace("升高为"+h+"米"+"\n 价格为"+a+"元") //输出为:升高为2米价格为10元 7.数组访问运算符五、程序结构1.条件结构语法格式:①if(条件){执行操作}②if(条件) {执行操作1} else {执行操作2}③if(条件) {执行操作1} elseif(条件2){执行操作2} elseif(条件3){执行操作3} ---- else {执行操作}2.循环结构语法格式:For(语句1;语句2;语句3) {执行语句}语句1通常为赋值语句,语句2通常为表达式进行条件判断,在循环执行一次后执行语句3例:var sum = 0;for (var i = 1; i<=100; i++) {sum += i;}//初始值为1,在小于100的情况下,加到sum中,再i加1执行trace(sum); //输出结果为50503.循环结构while语法格式:while(条件) {执行语句}var sum=0;var i=1;while(i<=100){sum+=i ; i++}trace(sum)输出结果:50504.break和continue语句:break用于跳出整个循环; continue 用于跳出本轮循环质数的判断,判断100以下的数字是否是质数for (var i=3;i<=100;i+=2) { //检测100以下的数字for (var j=2;j<i;j++) {if (i%j==0) {break;} //如果相除无余数,则退出j的循环else if (j==i-1) { trace(i); }}}计算1-100之间所有不能被5整除的自然数的和var sum=0for (var i=1;i<=100;i+=1) {if (i%5==0) {continue;} //如果能被5整除,则跳出,开始下一个循环trace(i) //输出所有不能被整除的数字sum+=i} trace(sum) //显示和,输出为40005.分支结构swich:swich 用来实现分支结构实例1获取系统时间,然后根据系统时间中的星期数输出适当的字符串var today=new Date()switch(today.getDay()){case 0:trace("今天是星期天");break; //case 与后边的数值,必须有一个空格case 1:trace("今天是星期一");break;case 2:trace("今天是星期二");break;case 3:trace("今天是星期三");break;case 4:trace("今天是星期四");break;case 5:trace("今天是星期五");break;default:trace("今天是星期六");} //返回当天的星期实例2判断当前月份所含的天数var today=new Date();theYear=today.getFullYear();theMonth=today.getMonth()+1;switch (theMonth){case 1:case 3: case 5:case 7: case 8:case 10: case 12:ts=31;break; //如果是1、3、5、7、8、10、12月,ts则为31case 4:case 6: case 9:case 11:ts=30;break; //如果是4、6、9、11月,ts则为30case 2:if(theYear%4==0){ts=29;} else {ts=28;}}trace("本月有"+ts+"天")6.with语句语言格式with(对象){对象的属性和方法}例:with(mc){nextFrame();_x=100;_y=100;_ratation=90;}六、事件处理机制1、按钮事件on( )实例1:用on的键盘事件控制一个元件。
新建一个元件,命名为mc,用移动键控制。
(注:可以将按钮放在屏幕外)on (keyPress "<Left>") {if(mc._x>=1){mc._x-=5}else{mc._x=0}} //左移5像素on (keyPress "<Right>") {if(mc._x<=549-mc._width){mc._x+=5}else{mc._x=550-mc._width}} //右移5像素on (keyPress "<Up>") {if(mc._y>=1){mc._y-=5;mc._xscale=mc._yscale-=5}else{mc._y=0;mc._xscale=mc._yscale} } //上移5像素,横向和纵向缩小20%on (keyPress "<Down>") {if(mc._y<=400-mc._height){mc._y+=5;mc._xscale=mc._yscale+=5}else{mc._y=400-mc._height;mc._xscale=mc._yscale}}//下移5像素横向和纵向增加5%2.影片剪辑事件onClipEvent()onClipEvent (load) {_x=0;_y=0;var Vx=25;var Vy=25}onClipEvent (enterFrame) {_x+=Vx;_y+=Vy;if(_x>550-_width||_x<0){Vx*=-1;}if(_y>400-_height||_y<0){Vy*=-1}}实例2mouseMove事件实现鼠标跟随第一个对象onClipEvent (mouseMove) {_x+=(_root._xmouse-_x)/5; //_xmouse、_ymouse鼠标的横纵坐标_y+=(_root._ymouse-_y)/5; //_root._xmouse鼠标在主场景的横坐标 } //将当前对象坐标定义为鼠标的坐标第二个对象onClipEvent (mouseMove) {_x+=(_root.n1._x-_x)/5; //_xmouse、_ymouse鼠标的横纵坐标_y+=(_root.n1._y-_y)/5; //_root._xmouse鼠标在主场景的横坐标 } //距离为到n1的距离的1/5以此类推实例3带角度变化的鼠标跟随onClipEvent (load) {stop();}onClipEvent (mouseDown) {play();_x+=(_root._xmouse-_x)/3;_y+=(_root._ymouse-_y)/3;var xm=_root._xmouse-_x;var ym=_root._ymouse-_y;_rotation=Math.atan(ym/xm)*360/(2*Math.PI)//向鼠标的方向旋转if(xm>0){_xscale=-100;}else{_xscale=100;}//如果鼠标在右侧,则翻转180度,否则不翻转}onClipEvent (mouseUp) {stop();}实例3 getCode方法获得键盘代码onClipEvent (keyDown) {实例4 onMouseMove函数实现鼠标跟随(在帧上加语句)建立几个影片剪辑,命名为n1---n9n1.onEnterFrame=function(){this._x+=(_root._xmouse-this._x)/5;this._y+=(_root._ymouse-this._y)/5;}for(var i=2;i<=9;i++){_root["n"+i].onMouseMove=function(){this._x+=(_root["n"+(this._name.substring(1)-1)]._x-this._x)/5;this._y+=(_root["n"+(this._name.substring(1)-1)]._y-this._y)/5;}}实例5 onEnterFrame函数实现图片悬停将一系列图片建成影片剪辑,调入到舞台,水平分布for (var i in _root) { //遍历主时间轴中的所有对象_root[i].onEnterFrame = function() { //在本事件中令每个对象左移5像素this._x -= 5;if (this._x<=-170) { //当实例的x位置超过-200时this._x += 895; }} //使图片放到右端_root[i].onRollOver=function(){for(var j in _root) //in 和_root之间有个空格{delete _root[j].onEnterFrame;}}_root[i].onRollOut = function() { //在本事件中令每个对象左移5像素for (var j in _root) {_root[j].onEnterFrame = function() { //在本事件中令每个对象左移5像素this._x -= 5;if (this._x<=-170) { //当实例的x位置超过-200时this._x += 895; }}}}} //使图片放到右端实例:实行无限循环的方法P53实例:符合键控制图片的移动P59onEnterFrame=function(){if(Key.isDown(Key.CONTROL )) {if(Key.isDown (Key.LEFT )){pic._x-=20;}if(Key.isDown (Key.RIGHT )){pic._x+=20;} } }下边两段程序的不同在于:if(Key.isDown(Key.RIGHT )){pic._x+=20;onEnterFrame=function(){ //按一下RIGHT键,则移动一次if(Key.getCode()==Key.RIGHT ){pic._x+=20;} } //按一下RIGHT键,则一直移动实例:getAscii方法制作打字游戏P60var chars=new Array();for(var i=0;i<10;i++){chars[i]=i+48}for(var i=0;i<26;i++){chars[i+10]=i+65;chars[i+36]=i+97}function generate() //generate函数用于生成随机字符{ttt.text="";for(var i=0;i<400;i++){rnd=Math.floor (62*Math.random ());ttt.text+=String.fromCharCode(chars[rnd])}}anniu.onPress=generate; //将函数generate设为单击按钮的事件处理函数_root.onKeyDown =function(){if(String.fromCharCode(Key.getAscii())==ttt.text.substring(0,1)){ttt.text=ttt.text.substring(1);if(ttt.text==""){generate();}}};Key.addListener(_root)实例:替换鼠标指针P62 未完成在要替换的指针上写上代码:onClipEvent (mouseMove){_x=_root._xmouse ;_y=_root._ymouse;}在帧上写上代码Mouse.hide() //影藏鼠标指针实例:自定义鼠标右键七、影片剪辑1.onEnterFrame=function(){hh._rotation+=0.01;mm._rotation+=0.6;ss._rotation+=36}实例:通过_rotation属性制作鼠标旋转跟随gg._x=aq._xgg._y=qq._ygg.onEnterFrame=function(){i=_root._xmouse -this._x;j=_root._ymouse -this._y;if(i<0){this._rotation=Math.atan(j/i)*360/(2*Math.PI)}else{this._rotation=Math.atan(j/i)*360/(2*Math.PI)+180}}2.透明度和可见性实例:通过_alpha属性实现图片渐入渐出tt.stop()onMouseDown=function() //鼠标按下事件(换图){tt.onEnterFrame=function(){this._alpha-=5; //透明度递减if(this._alpha<=0){delete this.onEnterFrame; //如果透明度小于0,则退出此递减this.gotoAndStop(1+this._currentframe%this._totalframes);/*到下一帧:this._currentframe:播放头所在的当前帧/this._totalframes总帧数如果变为1+this._currentframe,则到最后一帧时,无法到第一帧,一直停在最后一帧此时可以再在后边帧上加一个空白帧:当播放到最后一帧时,this._currentframe%this._totalframes=0,于是跳回第一帧*/ this.onEnterFrame=function(){this._alpha+=5;//透明度为0时,跳入下一帧,透明度递增;透明度到100时,退出此变化if(this._alpha>=100){delete this.onEnterFrame;}}}}}实例:用3.用宽度和高度_width和_heigth属性控制影片剪辑的大小实例:_width和_heigth属性控制影片剪辑大小tt.stop()zhe.onMouseMove=function(){this._width=2*Math.abs(_root._xmouse-this._x);this._height=2*Math.abs(_root._ymouse-this._y);};onMouseDown=function(){tt.gotoAndStop(1+tt._currentframe%tt._totalframes);}注意此处于上边的不同1+tt._currentframe%tt._totalframes实例:_xscale和_yscale属性控制影片剪辑缩放tt.stop()xx=zhe._widthyy=zhe._heightzhe.onMouseMove=function(){this._xscale=100*(_root._xmouse -this._x)/(xx/2);this._yscale=100*(_root._ymouse -this._y)/(yy/2);}onMouseDown=function(){tt.gotoAndStop(1+tt._currentframe%tt._totalframes);}实例:通过_xscale和_yscale属性控制影片剪辑缩放tt.stop()onKeyDown=function(){switch(Key.getCode()){case Key.UP :tt._yscale+=10;breakcase Key.DOWN :tt._yscale-=10;break//如果用height也可以接近效果,但不能实现翻转case Key.LEFT :tt._xscale+=10; breakcase Key.RIGHT :tt._xscale-=10;break}}Key.addListener (_root);//为_root注册键盘监听器4.鼠标位置主场景的鼠标位置:_root._xmouse _root._ymouse影片剪辑鼠标位置:_root.tt_x _root.tt._y5.帧属性实例:鼠标移进开始播放P75for(var i in _root){_root[i].stop();_root[i].onRollOver=function(){this.onEnterFrame=function(){if(this._currentframe<this._totalframes){this.nextFrame();}else{//delete this.onEnterFrame; 能够播放一次this.gotoAndPlay(1);//能够循环播放}}}_root[i].onRollOut=function(){this.onEnterFrame=function(){if(this._currentframe>1){this.prevFrame();}else{delete this.onEnterFrame;}}}} for(var i in _root){_root[i].stop();_root[i].onRollOver=function(){this.onEnterFrame=function(){if(this._currentframe<this._totalframes){this.nextFrame();}else{delete this.onEnterFrame;}}}_root[i].onRollOut=function(){this.onEnterFrame=function(){if(this._currentframe>1){this.prevFrame();}else{delete this.onEnterFrame;}}}}实例:制作load动画P77导入一个mp3.放在第三帧上,在第二帧上放上一个按钮,名称为an ,第二帧程序:stop();an.onRelease=function(){play();}创建一个影片剪辑元件,名为loadd.实例:duplicateMovieClip动态复制影片剪辑P79var i=1;star._visible=false;onMouseDown=function(){star.duplicateMovieClip("star"+i,i)with(_root["star"+i]){_x=_root._xmouse ;_y=_root._ymouse ;}_root["star"+i].onEnterFrame=function(){this._rotation+=10;}i++;}实例:用attachMovie方法制作雪花飞舞P81for(var i=0;i<100;i++){_root.attachMovie("s",i,i);_root[i]._x=550*Math.random();_root[i]._y=400*Math.random();_root[i]._rotation=60*Math.random ();_root[i]._xscale=_root[i]._yscale=_root[i]._alpha=100*Math.random ();_root[i]._alpha=70+30*Math.random ();_root[i].onEnterFrame=function(){this._y+=this._xscale/22;this._y%=400;this._rotation+=3;}实例:跟随鼠标游动的鱼P82实例:打蜜蜂游戏P83实例:用createEmptyMovieClip方法创建影片剪辑856.动态实现遮蔽:语句:mymc.setMask(遮蔽物)mymc为用来被遮蔽的物体名称;遮蔽物位于遮蔽层取消:mymc.setMask(null)实例:用遮蔽实现橡皮擦特效_root.createEmptyMovieClip ("mask",0);//创建空影片剪辑实例来放置附加的园p.setMask(mask);onMouseMove=function(){var i=mask.getNextHighestDepth();mask.attachMovie("yuan",i,i);mask[i]._x=_root._xmouse ;mask[i]._y=_root._ymouse ;}实例:用碰撞测试实现粘附特效P95mc._visible=0;onEnterFrame=function(){for(var i=0;i<10;i++){depth=_root.getNextHighestDepth ();attachMovie("ball","b"+depth,depth);_root["b"+depth]._x=600*Math.random()-50;_root["b"+depth].v=5+10*Math.random();_root["b"+depth].onEnterFrame=function(){this._y+=this.v;this._x+=5*Math.random ();if(mc.hitTest(this._x,this._y,true)){ran=3*Math.random ();if(ran<1){delete this.onEnterFrame;}}if(this._y>400){this.removeMovieClip();}}}}实例:用loadMovie制作图片展示P86实例:鼠标跟随的下雪效果P89实例:用swapDepths方法实现立体旋转效果90实例:制作放大镜P92实例:用遮蔽是想橡皮擦特效P93_root.createEmptyMovieClip ("mask",0);//创建空影片剪辑实例来放置附加的园p.setMask(mask);onMouseMove=function(){var i=mask.getNextHighestDepth();mask.attachMovie("yuan",i,i);mask[i]._x=_root._xmouse ;mask[i]._y=_root._ymouse ;}实例:用碰撞测试实现粘附特效P95Stage.scaleMode="showAll"mc._alpha=0;onEnterFrame=function(){for(var i=0;i<10;i++){depth=_root.getNextHighestDepth ();attachMovie("ball","b"+depth,depth);_root["b"+depth]._x=600*Math.random()-50;_root["b"+depth].v=5+10*Math.random();_root["b"+depth].onEnterFrame=function(){this._y+=this.v;this._x+=5*Math.random ();if(mc.hitTest(this._x,this._y,true)){ran=3*Math.random ();if(ran<1){delete this.onEnterFrame;}}if(this._y>400){7.绘画方法MovieClip类的方法可以通过AS来动态绘制图形。