简介:
物体对鼠标的跟随可以采用在帧上添加as语句starDrag的方法来实现。但是采用这种方法所实现的跟随过程太生硬,跟得实在是紧,也就是当鼠标移动到别的位置,物体也很快的移动了过来,假如要让物体慢慢的靠近鼠标,使用starDrag这条语句就不能做到……
");
//--> */
物体对鼠标的跟随可以采用在帧上添加as语句starDrag的方法来实现。 慢慢靠近的效果:
onClipEvent (enterFrame) { xTarget = _root._xmouse; yTarget = _root._ymouse; _x = xTarget; _y = yTarget; }
其中,语句 _x = xTarget 和 _y = yTarget的作用是使物体的坐标定位到(xTarget,yTarget)上, 修改这几行代码,就可以使物体在鼠标移动后,慢慢的靠近鼠标。 _x = xTarget 等价于 _x = xTarget + _x - _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; } 实现了慢慢靠近 对“慢慢靠近”的加以利用:一个跟一个
在帧上添加代码: copies = 5; for (var i = 1; i<=copies; i++) { duplicateMovieClip ("drag0", "drag"+i, i); eval("drag"+i).num = i; } 上面的代码复制了5个,drag1~drag5,连同drag0,场景上共6个 在场景上的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个影片剪辑,执行的代码是: “一个跟一个”代码的另一种写法 上面的“一个跟一个”的制作,是在场景上只放置了一个影片剪辑,然后在影片剪辑上添加as代码,再通过在帧上添加as代码(duplicateMovie)来复制影片剪辑。 还可以用另外一种代码方式来实现 效果
这种方式是直接在场景上放置了6个影片剪辑,依次命名为:drag0~drag5。然后在帧上添加代码如下: _root.drag0._x = _root._xmouse+10; _root.drag0._y = _root._ymouse; i = 1; while (i<=5) { dragi = eval("/drag"+i); dragi_prev = eval("/drag"+(i-1)); dragi._x += (dragi_prev._x-dragi._x)*0.5+10; dragi._y += (dragi_prev._y-dragi._y)*0.5; i = i+1; }
不过代码添加完毕,测试的时候,你会发现这些影片剪辑并不会移动。因为还需要下面一个步骤: 在时间轴的第二帧插入帧(F5),因为只有至少2帧,动画才会产生循环,上面那些代码也才会重复运行,否则如果只有1帧的话,那些代码也就只被执行了一次。 |
|