快速业务通道

Flash游戏开发常用函数代

作者 佚名技术 来源 服务器技术 浏览 发布时间 2012-07-08

  ■■■对象数组
比如要构建一个有很多属性的数组,简单的可以这样做:
2004代码:
vara:Array=newArray();
for(vari=0;i<10;i++){
a[i]=newObject();
a[i].x=10;
a[i].y=10*i;
a[i].name="---";
a[i].id=i;
//随便你给什么属性啊。
}
////先用局部变量存储对象会更好一点。
vara=newArray()
for(vari=0;i<10;i++){
varta=newObject();
ta.x=10;
ta.y=10;
ta.name="n"+i;
a.push(ta);
}
////或者更简便一点的方法:
vara=newArray()
for(vari=0;i<10;i++){
a[i]={x:10,y:10,name:"n"+i}
}


■■■程序控制角色运动
下面这段代码控制MovieClipmc从(50,50)横向运动到(100,50)停止,速度为5pixel:
mc._x=mc._y=50;
mc.onEnterFrame=function(){
_x+=5;
trace(_x);
if(_x==100){
delete(mc.onEnterFrame);
}
};


■■■精确计时
我们设定了时间为60秒,然后通过setInterval来定期(每1000milliseconds)触发一个函数runTimer。
functionrunTimer用来计时,当时间到了以后,转去执行outThere。
functionoutThere用来处理时间到了以后的动作,不要忘记clearInterval(intervalID),停止计时。
vartime:Number=60;
varintervalID:Number;
intervalID=setInterval(runTimer,1000);
functionrunTimer(){
time--;
trace(time);
if(time==0){
outThere();
}
}
functionoutThere(){
//blahblahblah
clearInterval(intervalID);
}


■■■找到目前最小的一个可用的深度Depth(来自国外
针对FlashPlayer6的:
availTopDepth=function(){
varallDepths=[];
for(varzin_root){
if(_root[z]instanceofButton||_root[z]instanceofMovieClip||_root[z]instanceofTextField){
allDepths.push(_root[z].getDepth());
}
}
if(allDepths.length!=0){
sortAll=function(a,b){if(ab){return1;}else{return0;}};
allDepths.sort(sortAll);
return(parseInt(allDepths[allDepths.length-1])+1);
}
};
trace(_root.availTopDepth());
放置一个MovieClip在Stage,再执行这段Action就会得到最近的一个可用深度。我们也可以用这个来创建绝对不

会出问题的MovieClip,比如:
_root.createEmptyMovieClip("mc_name",availTopDepth());
getNextHighestDepth()以及getInstanceAtDepth(depth)是forplayer7的。


■■■鼠标消隐
鼠标消隐之后,右健弹出菜单,鼠标就又出现了,并且一直保留着~
完整的解决方法是:在左健抬起、右健第二次抬起、回车键抬起的时候再次消隐鼠标。
完整的方法比较复杂,下面是一个简单的解决方法,可以解决绝大多数的问题:
onEnterFrame=function(){
if(Key.isDown(1)||Key.isDown(Key.ENTER)){
Mouse.hide();
}
}


■■■我常用的一个加速度移动的代码
//以下代码放到主场景第一帧
stop();
_global.a=5;
//移动加速度,越大越慢
_global.click_x=0;
//用来记录点击鼠标的位置
_global.click_y=0;
_root.onMouseDown=function(){
_global.click_x=_root._xmouse;
_global.click_y=_root._ymouse;
//me是受控mc的instancename
me.onEnterFrame=function(){
if(Math.abs(_global.click_x-me._x)<2&&Math.abs(_global.click_y-me._y)<2){
//如果已经基本移到了鼠标点过的位置就取消这个事件句柄的响应程序
delete(this.onEnterFrame);
return;
}else{
//控制移动
me._x+=(_global.click_x-me._x)/_global.a;
me._y+=(_global.click_y-me._y)/_global.a;
}
};
};
//////以下部分可选
//a_v是个可以输入的文本框,用来输入加速度,即可以自定义速度,方便调试
a_v.onChanged=function(){
if(a_v.text==""||Number(a_v.text)>1000||Number(a_v.text)<0){
//d

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号