点击浏览该文件好了,对效果的分析:
1.各个圆圈都会有一种远离鼠标的效果,当鼠标接近它们时,反而会离开鼠标,鼠标never touch them!!!
2.当鼠标移离圆圈时,圆圈始终会有一种回到原位置的趋势.(注重这两个效果是对所有圆圈都有的,只是距鼠标远的话不明显) 简单说一下:
先是建一个圆形MC啦,拖到主场景中,第它上面写如下代码:
onClipEvent(load){
xoo=_x; //xoo,yoo是记录圆圈最原始的位置,也就是我们拖放位置.
yoo=_y;
}
onClipEvent(enterFrame){
xo=_x; //xo,yo是记录当前帧的圆圈的位置(我觉得还有一种解释...呆会说)
yo=_y;
x=_root._xmouse; //这是鼠标的位置.
y=_root._ymouse;
a=x-xo;
b=y-yo;
r=Math.sqrt(a*a+b*b); //不用说了吧,勾股定理,也就是鼠标和当前圆圈的距离. //现在我们知道了圆圈的当前位置,鼠标的当前位置,和它们间的距离,那么接下来就计算圆圈的下一个位置了。 fx=this._x-(a/r)*500/r; //仔细揣摩这个公式,它产生的效果就是使圆圈"离开"鼠标,
fy=this._y-(b/r)*500/r; //下面解释. vx=(xoo-xo)/2; //这个公式就是使圆圈有回到原位置上的趋势 : )
vy=(yoo-yo)/2; _x=fx+vx; //把上面那两个公式合在一起....
_y=fy+vy; } 好了,现在说一下我对fx,fy这两个公式的想法.
fx=this._x-(a/r)*500/r;
当然,a,b,r 实际上我们可以看作是一个直角三角形的三条边,r是斜边啦.那么a/r实际上就是cos D (我们设想D就是这个三角形的一个邻角了),好了,也就是说cosD*500/r,大家想到什么没有?再改一下,令T=500/r,也就是cos D*T.好了,你肯定想到了,我们联想到三角函数中,想象一下坐标系中有一个以 T 为半径的圆,那么 cos D*T其实就是这个角度在这个圆下面的横坐标量了(有点解释不清了,呵呵).
大家其实不必太在意a/r 这个东东,它记录的只是圆圈和鼠标连线所成的角度的余炫(我们很轻易联想到cos这个东东很经常用来计算圆上某一点的横坐标量),
我们看一下,500/r 这个东东,按照上面的理解,我们把它看成是半径,半径?一般应该是个固定的某个值才对啊——没错了,你其实可以把它改成一个固定值(比如100),你将看到的效果就是,不管圆圈离鼠标多远,鼠标都会产生离开鼠标的效果 ,也就是这个效果和距离没有关系了。所以写成500/r,可以产生r越大(距离越远),cos(a/r)*500/r越小,也就是在横坐标上的增量越小的效果。
fy 是相同的道理的。关于xo,yo,我对 xo=_x,yo=_y的理解是记录当前帧的位置,那么后面的this._x和最后的_x就应该是代表下帧的位置了。
还是我还有一种理解,就是xo=_x,yo=_y用来记录的是前一帧的位置,而后面的this._x和最后的_x是用来计算当前帧的。 我想前一种理解才应该是对的。 附上源文件:
点击浏览该文件这是flashmx 2004版的,因为源文件并不复杂,所以不传mx的版了。