
常用软件类: |
|杀毒安全 | |联络聊天 | |网络软件 | |多媒体类 | |系统工具 | |图形图像 | |系统工具 | |应用软件 | |行业软件 |
开发设计类: |
|动画制作 | |图像处理 | |3D设计 | |操作系统 | |站长学院 | |网络相关 | |WEB设计 | |数据库类 | |程序开发 |
| var mouseListener:Object=new Object(); var totalLength:Number=0; var pileLength:Number=0; var speed:Number=5; //匀速运动,此是定值。 mouseListener.onMouseDown=function(){ _root.totalLength=obj._x-_root._xmouse; _root.onEnterFrame=function(){ if(_root.pileLength+_root.speed<=Math.abs(_root.totalLength)){ if(_root.totalLength<0){ obj._x+=_root.speed; }else{ obj._x-=_root.speed; } _root.pileLength+=_root.speed; }else{ if(_root.totalLength<0){ obj._x+=Math.abs(_root.totalLength)-_root.pileLength; }else{ obj._x-=Math.abs(_root.totalLength)-_root.pileLength; } _root.pileLength=0; _root.totalLength=0; delete _root.onEnterFrame; } } } Mouse.addListener(mouseListener); |
从上面的源码中的Mouse.addListener(mouseListener);可以看到我们注册了鼠标的按下侦听事件。每次鼠标点下去的时候,我们的侦听事件就会给触发。这侦听事件里面我们求出了obj对象离指定点的总路径totalLength。之后我们给主场景赋予了onEnterFrame事件,然obj对象移动到指定位置。从代码上来看我们可以看到变量pileLength是充当累积路径用的,每当obj移动一个步长,那么pileLength就累积起一个步长的长度。有人可能会不大清楚if(_root.pileLength+_root.speed<Math.abs(_root.totalLength))这句代码的意思,其实这是当obj接近目的点并且在下一次移动就到达目的点的时候,如果剩余的距离不够一个步长那么就走完剩余的距离即可。也就是else分支的代码,最后我们还要将pileLength复位和删除掉onEnterFrame事件,以便为下一次移动作准备。这就是累积路径法,下面我来说一下剩余路径法是如何解决这个问题的。
二、剩余路径法
与累积路径法相反,他是通过求出剩余的路径的长度,如果剩余路径长度为零就代表已经到达目的点。
让我们先看看源码吧:
| var mouseListener:Object=new Object(); var totalLength:Number=0; var speed:Number=5; //匀速运动,此是定值。 mouseListener.onMouseDown=function(){ _root.totalLength=obj._x-_root._xmouse; _root.onEnterFrame=function(){ if(_root.totalLength>=_root.speed){ if(_root.totalLength<0){ obj._x+=_root.speed; _root.totalLength+=_root.speed; }else{ obj._x-=_root.speed; _root.totalLength-=_root.speed; } }else{ If(_root.totalLength<0){ obj._x+=_root.totalLength; }else{ obj._x-=_root.totalLength; } _root.totalLength=0; delete _root.onEnterFrame; } } } Mouse.addListener(mouseListener); |
先来看看源代码吧:
| var mouseListener:Object = new Object(); var totalLength:Number = 0; var speed:Number = 3; var count:Number = 0; var spare:Number = 0; var position:Number = 0; mouseListener.onMouseDown = function() { _root.totalLength = people._x-_root._xmouse; _root.count = Math.abs(Math.floor(_root.totalLength/_root.speed)); _root.spare = _root.totalLength%_root.speed; _root.onEnterFrame = function() { if (_root.count != 0) { //判断方向 if (_root.totalLength>0) { obj._x += _root.speed; } else { obj._x -= _root.speed; } _root.count--; } else { if(_root.totalLength<0){ obj._x -= _root.spare; }else{ obj._x+=_root.spare; } _root.spare = 0; _root.totalLength = 0; delete _root.onEnterFrame; } }; }; Mouse.addListener(mouseListener); |
以上代码就是一个按次数移动的方法。其中的_root.spare = _root.totalLength%_root.speed;可能会不理解,其实这是求取不足一次移动的距离,也是剩余的距离不够作为一次移动步长了,最后只要加上这段距离就能到达目的地了。
如果哪位高手还什么更好的解决方法不妨拿出来共享一下,让大家学习学习。不懂的朋友或者认为我上面的代码有误的朋友(上面的代码都没有在Flash中运行过,只是凭空写出来的)可以联系我跟我讨论,本人先在此谢谢大家了。希望在时间充裕的时候和大家探讨更深入的问题。