代码:
以下是引用片段:
for(variin_root){
if(_root[i].onEnterFrame!=null){//如果这个Object实现了onEnterFrame接口的话
_root[i].oldFunc=_root[i].onEnterFrame;//首先保存原来的onEnterFrame的句柄
_root[i].onEnterFrame=function(){//然后开始替换了~~加上一层壳~~
trace(this+":onEnterFrameCalled.");
this.oldFunc();//我们用保留的句柄调用原来的函数
trace(this+":onEnterFrameReturned.");
}
}
}
如果要取消这些附加的操作:
代码:
以下是引用片段:
for(variin_root){
if(_root[i].oldFunc!=null){//如果发现改过得痕迹
_root[i].onEnterFrame=_root[i].oldFunc;
delete(oldFunc);
}
}
呵呵这些操作的关键在于 Flash里面的引用机制:
所有函数名都是引用,而函数本身是浮在数据的海洋里面的。如果没有任何变量引用他,他就会被回收。如果有,
他就不会被回收。所以有着样一个有趣的事情:delete函数不会删掉任何东西,除了要求删掉的那个名字:(和java
机制相似,而和C不同)
以下是引用片段:
a=function(){trace("Functionacalled");}
b=a;
delete(a);//除了a这个名字被删掉以外,没有任何事情发生
b();
函数通过this得到其调用者的实例。
MovieClipPlus.as
定义了一些简单的MC操作
//画点:由于Flash没有画点,那我们就画短线
以下是引用片段:
MovieClip.prototype.point=OxMovieClipPoint;
functionOxMovieClipPoint(x,y){
this.moveTo(x,y);
this.lineTo(x+1,y);
}
//画矩形,左上角x1,y1 右下角x2,y2, 颜色rgb, 不透明度alpha
以下是引用片段:
MovieClip.prototype.rect=OxMovieClipRect;
functionOxMovieClipRect(x1,y1,x2,y2,rgb,alpha){
this.beginFill(rgb,alpha);
this.moveTo(x1,y1);
this.lineTo(x1,y2);
this.lineTo(x2,y2);
this.lineTo(x2,y1);
this.lineTo(x1,y1);
this.endFill();
}
//画圆:这么bt的冬冬当然不是我写的,作者素JodyKeating
//圆心x,y,半径r
MovieClip.prototype.circle=OxMovieClipCircle;
functionOxMovieClipCircle(x,y,r){
vara=r*0.414213562;
varb=r*0.707106781;
this.moveTo(x+r,y);
this.curveTo(x+r,y-a,x+b,y-b);
this.curveTo(x+a,y-r,x,y-r);
this.curveTo(x-a,y-r,x-b,y-b);
this.curveTo(x-r,y-a,x-r,y);
this.curveTo(x-r,y+a,x-b,y+b);
this.curveTo(x-a,y+r,x,y+r);
this.curveTo(x+a,y+r,x+b,y+b);
this.curveTo(x+r,y+a,x+r,y);
}
两点间的直线移动
以下是引用片段:
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;
}
};
}
计算两个对象之间/两点之间的距离(注册点)