物体对鼠标的跟随可以采用在帧上添加as语句starDrag的方法来实现。 但是采用这种方法所实现的跟随过程太生硬,跟得实在是紧,也就是当鼠标移动到别的位置,物体也很快的移动了过来,假如要让物体慢慢(速度可以控制)的靠近鼠标,使用starDrag这条语句就不能做到。
straDrag的效果:
点击浏览该文件 慢慢靠近的效果:
点击浏览该文件
starDrag语句的功能其实是和下面的代码相同的。
onClipEvent (enterFrame) { xTarget = _root._xmouse; yTarget = _root._ymouse; _x = xTarget; _y = yTarget; }
这几行代码是添加在物体(影片剪辑)上面的。
其中,语句 _x = xTarget 和 _y = yTarget的作用是使物体的坐标定位到(xTarget,yTarget)上, 而(xTarget,yTarget)就是鼠标的当前坐标。
修改这几行代码,就可以使物体在鼠标移动后,慢慢的靠近鼠标。
_x = xTarget 等价于 _x = xTarget + _x - _x(加一个减一个) 即:_x =_x + (xTarget - _x) 其中的(xTarget - _x)是物体的目标位置与当前位置的坐标差
如果让(xTarget - _x)乘上一个小于1的系数,那么物体就不会突然移动到坐标(xTarget,yTarget)上, 而是慢慢的靠过去。
于是,修改后的代码如下:
onClipEvent (enterFrame) { xTarget = _root._xmouse; yTarget = _root._ymouse; fraction=0.5 _x = _x + (xTarget-_x)*fraction; _y = _y + (yTarget-_y)*fraction; }
实现了慢慢靠近
源文件:
点击浏览该文件
对“慢慢靠近”的加以利用:一个跟一个
见效果:
点击浏览该文件 源文件:
点击浏览该文件
场景上放置一个影片剪辑,instance name命名为darg0
在帧上添加代码:
copies = 5; for (var i = 1; i<=copies; i++) { duplicateMovieClip ("drag0", "drag"+i, i); eval("drag"+i).num = i; }
上面的代码复制了5个,drag1~drag5,连同drag0,场景上共6个 其中,还给drag1~drag5定义了内部变量drag1.num~drag5.num
在场景上的drag0上面添加代码:
onClipEvent (enterFrame) { if (num) { xTarget = eval("_root.drag"+(num-1))._x; yTarget = eval("_root.drag"+(num-1))._y; } else { xTarget = _root._xmouse; yTarget = _root._ymouse; } fraction = .5; _x += (xTarget-_x)*fraction; _y += (yTarget-_y)*fraction; }
这几行代码使得drag0跟随着鼠标,drag1跟随着drag0,drag2跟随着drag1,……,drag5跟随着drag4
解释一下if这个判断语句
因为drag1.num~drag5.num的值都不为空,所以对于drag1~drag5这5个影片剪辑,执行的代码是: xTarget = eval("_root.drag"+(num-1))._x; yTarget = eval("_root.drag"+(num-1))._y;也就是跟随着前一个 而对于drag0,由于没有给它定义num,它的值为空,所以对于drag0,执行的代码是: xTarget = _root._xmouse; yTarget = _root._ymouse;也就是跟随着鼠标
|