《Flash游戏开发常用函数代.doc》由会员分享,可在线阅读,更多相关《Flash游戏开发常用函数代.doc(27页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、.1/27FlashFlash 游戏开发常用函数代游戏开发常用函数代游牧人游牧人 2 2类型类型:闪吧闪吧 BBSBBS来源来源:闪吧闪吧对象数组比如要构建一个有很多属性的数组,简单的可以这样做:2004 代码:var a:Array=new Array();for(var i=0;i10;i+)ai=new Object();ai.x=10;ai.y=10*i;ai.name=-;ai.id=i;/随便你给什么属性啊。/先用局部变量存储对象会更好一点。var a=new Array()for(var i=0;i10;i+)var ta=new Object();ta.x=10;ta.y=10
2、;ta.name=n+i;a.push(ta);.2/27/或者更简便一点的方法:var a=new Array()for(var i=0;i10;i+)ai=x:10,y:10,name:n+i程序控制角色运动下面这段代码控制 MovieClip mc 从(50,50)横向运动到(100,50)停止,速度为 5 pixel:mc._x=mc._y=50;mc.onEnterFrame=function()_x+=5;trace(_x);if(_x=100)delete(mc.onEnterFrame);精确计时我们设定了时间为 60 秒,然后通过 setInterval 来定期(每 1000
3、milliseconds)触发一个函.3/27数 runTimer。function runTimer 用来计时,当时间到了以后,转去执行 outThere。function outThere 用来处理时间到了以后的动作,不要忘记 clearInterval(intervalID),停止计时。var time:Number=60;var intervalID:Number;intervalID=setInterval(runTimer,1000);function runTimer()time-;trace(time);if(time=0)outThere();function outTher
4、e()/blah blah blahclearInterval(intervalID);找到目前最小的一个可用的深度 Depth(来自国外)针对 Flash Player 6 的:.4/27availTopDepth=function()var allDepths=;for(var z in _root)if(_rootz instanceof Button|_rootz instanceof MovieClip|_rootz instanceof TextField)allDepths.push(_rootz.getDepth();if(allDepths.length!=0)sortAll
5、=function(a,b)if(ab)return 1;else return 0;allDepths.sort(sortAll);return(parseInt(allDepthsallDepths.length-1)+1);trace(_root.availTopDepth();放置一个 MovieClip 在 Stage,再执行这段 Action 就会得到最近的一个可用深度。我们也可以用这个来创建绝对不会出问题的 MovieClip,比如:_root.createEmptyMovieClip(mc_name,availTopDepth();getNextHighestDepth()以与
6、 getInstanceAtDepth(depth)是 for player 7 的。.5/27鼠标消隐鼠标消隐之后,右健弹出菜单,鼠标就又出现了,并且一直保留着完整的解决方法是:在 左健抬起、右健第二次抬起、回车键抬起的时候再次消隐鼠标。完整的方法比较复杂,下面是一个简单的解决方法,可以解决绝大多数的问题:onEnterFrame=function()if(Key.isDown(1)|Key.isDown(Key.ENTER)Mouse.hide();我常用的一个加速度移动的代码/以下代码放到主场景第一帧stop();_global.a=5;/移动加速度,越大越慢_global.click_
7、x=0;/用来记录点击鼠标的位置_global.click_y=0;_root.onMouseDown=function()_global.click_x=_root._xmouse;.6/27_global.click_y=_root._ymouse;/me 是受控 mc 的 instance nameme.onEnterFrame=function()if(Math.abs(_global.click_x-me._x)2&Math.abs(_global.click_y-me._y)1000|Number(a_v.text)0)/default valuea_v.text=5;else _
8、global.a=Number(a_v.text)?Number(a_v.text):5;.7/27/trace(_global.a);随机输出 1 到 100 而不从复的语句seq=new Array(100);pArray=new Array(100);function makeRandom()for(i=1;i=100;i+)seqi=A;function mRandom()while(true)n=int(random(100)+1;if(seqn=A)seqn=0;break;return(n);.8/27function rArray()for(i=1;idis)delete on
9、EnterFrame;.13/27计算两个对象之间/两点之间的距离(注册点)function getDistanceOf(target1,target2,x2,y2)if(arguments.length=4)dx=x2-target1;dy=y2-target2;else if(arguments.length=2)dx=target2._x-target1._x;dy=target2._y-target1._y;return Math.sqrt(dx*dx+dy*dy);/Arguments 对象是一个数组,其中包含作为参数传递给任何函数的值。每次在动作脚本中调用函数时,都会为该函数自动创
10、建 Arguments 对象。同时还会创建一个局部变量 arguments,使您可引用 arguments 对象。让播放的 MC 暂停一段时间function pausePlay(sec)pfunc=function().14/27this.play();clearInterval(this.pint);stop();this.pint=setInterval(this,pfunc,sec*1000);/这样调用.sec 是暂停的时间,单位是秒.pausePlay(2);onHitTest(target),自己写的一个 MC 事件,当该 MC 与指定的 MC hitTest 的时候触发事件.其
11、实也没什么特别的地方,一样也是用 setInterval 来实现stop();MovieClip.prototype.listen=function(target)if(this.isHiting=undefined)this.isHiting=this.hitTest(target);if(this.hitTest(target)if(this.isHiting=false)this.broadcastMessage(onHitTest,this,target);/广播事件,给事件传递 this 和 target 两个参数.15/27this.isHiting=true;else this.
12、isHiting=false;/为 MovieClip 添加域成员 listen 成员,用于监视当前对象与目标是否碰撞MovieClip.prototype.watch=function(target)this.timer=setInterval(this,listen,50,target);/以每 50 毫秒检测一次的速度来检测是否碰撞MovieClip.prototype.unWatch=function()clearInterval(this.timer);/停止对对象的监视ASBroadcaster.initialize(MovieClip.prototype);/初始化 MovieC
13、lip 原型为事件源/下面是调用的示例/假设有两个 MovieClip,左边 ball,右边 wall,让 ball 不断往 wall 移动,同时监视 wall,一旦击中触发事件 onHitTestball.onEnterFrame=function()this._x+=5;/让 ball 不断往右方移动工myListener=new Object();.16/27myListener.onHitTest=function(source,target)trace(The +source._name+hit +target._name+.);ball.addListener(myListener
14、);/创建监听员并注册给 ballball.watch(wall);/让 ball 监视 wallMD5 32 位码的 FLASH 算法/-function md5(s)return binl2hex(core_md5(str2binl(s),s.length*strsize);function core_md5(x,len)xlen 5=(xlen 5)|(128 9)16)+(y 16)+(lsw 16);return(msw 16)|(lsw&65535);function bit_rol(num,t)return(num (32-cnt);function str2binl(str)v
15、ar bin=Array();var mask=(1 strsize)-1;var i=0;while(i 5=(bini 5)|(str.charCodeAt(i/strsize)&mask)i%32);i=i+strsize;return bin;function binl2hex(binarray)if(hexcase)else.22/27var hex_tab=0123456789abcdef;var str=;var i=0;while(i 2)(i%4*8)+4)&15)+hex_tab.charAt(binarrayi 2)(i%4*8)&15);i+;return str;va
16、r hexcase=0;var strsize=8;/-以上不用修改,b=md5(xx);/xx 可设为任意字符s=b.toUpperCase();/转换成大写trace(b);trace(s);.23/27发点缓动函数Math.linearTween=function(t,b,c,d)return c*t/d+b;/线性运动函数Math.easeInQuad=function(t,b,c,d)return c*(t/=d)*t+b;/二次缓入函数Math.easeOutQuad=function(t,b,c,d)return-c*(t/=d)*(t-2)+b;/二次缓出函数Math.ease
17、INOutQuad=function(t,b,c,d)if(t/=d/2)1)return c/2*t*t+b;return-c/2*(-t)*(t-2)-1)+b;/二次缓入缓出函数.24/27Math.easeInCubic=function(t,b,c,d)return c*Math.pow(t/d,3)+b;/三次缓入函数Math.easeOutCubic=function(t,b,c,d)return c*(Math.pow(t/d-1,3)+1)+b;/三次缓出函数Math.easeINOutCubic=function(t,b,c,d)if(t/=d/2)1)return c/2
18、*Math.pow(t,3)+b;return c/2*(Math.pow(t-2,3)+2)+b;/三次缓入缓出函数Math.easeInQuart=function(t,b,c,d)return c*Math.pow(t/d,4)+b;/四次缓入函数Math.easeOutQuart=function(t,b,c,d)return-c*(Math.pow(t/d-1,4)-1)+b;.25/27/四次缓出函数Math.easeINOutQuart=function(t,b,c,d)if(t/=d/2)1)return c/2*Math.pow(t,4)+b;return-c/2*(Math
19、.pow(t-2,4)-2)+b;/四次缓入缓出函数Math.easeInQuint=function(t,b,c,d)return c*Math.pow(t/d,5)+b;/五次缓入函数Math.easeOutQuint=function(t,b,c,d)return c*(Math.pow(t/d-1,5)+1)+b;/五次缓出函数Math.easeINOutQuint=function(t,b,c,d)if(t/=d/2)1)return c/2*Math.pow(t,5)+b;return c/2*(Math.pow(t-2,5)+2)+b;.26/27/五次缓入缓出函数Math.ea
20、seInSine=function(t,b,c,d)return c*(1-Math.cos(t/d*(Math.PI/2)+b;/正弦缓出函数Math.easeOutSine=function(t,b,c,d)return c*Math.sin(t/d*(Math.PI/2)+b;/正弦缓出函数Math.easeINOutSine=function(t,b,c,d)return c/2*(1-Math.cos(Math.PI*t/d)+b;/正弦缓入缓出函数Math.easeInExpo=function(t,b,c,d)return c*Math.pow(2,10*(t/d-1)+b;/指
21、数缓入函数Math.easeOutExpo=function(t,b,c,d)return c*(-Math.pow(2,-10*t/d)+1)+b;/指数缓出函数Math.easeINOutExpo=function(t,b,c,d).27/27if(t/=d/2)1)return c/2*Math.pow(2,10*(t-1)+b;return c/2*(-Math.pow(2,-10*-t)+2)+b;/指数缓入缓出函数Math.easeInCirc=function(t,b,c,d)return c*(1-Math.sqrt(1-(t/=d)*t)+b;/圆形缓入函数Math.easeOutCirc=function(t,b,c,d)return c*Math.sqrt(1-(t=t/d-1)*t)+b;/圆形缓出函数Math.easeINOutCirc=function(t,b,c,d)if(t/=d/2)1)return c/2*(1-Math.sqrt(1-t*t)+b;return c/2*(Math.sqrt(1-(t-=2)*t)+1)+b;/圆形缓入缓出函数
限制150内