宫零欷 - 2007-6-22 15:34:00
两点间的直线移动
以下是引用片段:
vars=15;
_root.onMouseDown=function(){
varoldM_x=_root._xmouse;
varoldM_y=_root._ymouse;
ax=aa._x;
ay=aa._y;
dis=Math.sqrt((oldM_x-ax)*(oldM_x-ax)+(oldM_y-ay)*(oldM_y-ay));
xa=(oldM_x-ax)/dis;
ya=(oldM_y-ay)/dis;
amove();
};
functionamove(){
onEnterFrame=function(){
aa._x+=s*xa;
aa._y+=s*ya;
if(Math.sqrt((aa._x-ax)*(aa._x-ax)+(aa._y-ay)*(aa._y-ay))>dis){
deleteonEnterFrame;
}
};
}
计算两个对象之间/两点之间的距离(注册点)
以下是引用片段:
functiongetDistanceOf(target1,target2,x2,y2){
if(arguments.length==4){
dx=x2-target1;
dy=y2-target2;
}elseif(arguments.length==2){
dx=target2._x-target1._x;
dy=target2._y-target1._y;
}
returnMath.sqrt(dx*dx+dy*dy);
}
//Arguments 对象是一个数组,其中包含作为参数传递给任何函数的值。每次在动作脚本中调用函数时,都会为该函
数自动创建 Arguments 对象。同时还会创建一个局部变量 arguments,使您可引用 arguments 对象。
让播放的MC暂停一段时间
以下是引用片段:
functionpausePlay(sec){
pfunc=function(){
this.play();
clearInterval(this.pint);
}
stop();
this.pint=setInterval(this,"pfunc",sec*1000);
}
//这样调用.sec是暂停的时间,单位是秒.
pausePlay(2);
onHitTest(target),自己写的一个MC事件,当该MC与指定的MC hitTest的时候触发事件.其实也没什么特别的地方,一样也是用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两个参数
}
this.isHiting=true;
}else{
this.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);//初始化MovieClip原型为事件源
//下面是调用的示例
//假设有两个MovieClip,左边ball,右边wall,让ball不断往wall移动,同时监视wall,一旦击中触发事件onHitTest
ball.onEnterFrame=function(){
this._x+=5;
};//让ball不断往右方移动工
myListener=newObject();
myListener.onHitTest=function(source,target){
trace("The"+source._name+"hit"+target._name+".");
};
ball.addListener(myListener);//创建监听员并注册给ball
ball.watch(wall);//让ball监视wall