| 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事件,以便为下一次移动作准备。这就是累积路径法,下面我来说一下剩余路径法是如何解决这个问题的。