【已解决】关于cocos2d-js中使用moveTo函数的问题

function automoveOfSprite2 () {
            var delta_X = Sprite1.getPositionX() ;
            var delta_Y = Sprite1.getPositionY() ;
            Sprite2.runAction(cc.moveTo(TimeOfMove_Sprite2,cc.p(delta_X,delta_Y)));
            cc.log("remove succeed!");
        }

        this.schedule(automoveOfSprite2,0.1);


```

代码是这个样子,大体意思就是通过计时器循环让精灵2追赶精灵1(精灵1我用键盘可以控制移动)。问题是精灵2到达了精灵1的位置也不会停下来,似乎是具有惯性。
这样来说的话moveTo函数每循环一次,位移向量都是会积累的是吗?

好像是好累加的,我之前这样用无法做到追击效果,你可以试试在执行下一次moveto之前将上一次的moveto动作stop掉,给动作加个tag,然后每次进来先停掉上一次action

每次执行,可以先stopAllActions

moveTo是继承moveBy的,所以产生了你看到的惯性效果,在你的第一个moveTo执行完之前就添加了第二个moveTo到动作队列,你需要将你计时器的时间改的比moveTo的时间长

function automoveOfSprite2 () {
            Sprite2.stopAllActions();
            var delta_X = Sprite1.getPositionX() - Sprite2.getPositionX() ;
            var delta_Y = Sprite1.getPositionY() - Sprite2.getPositionY() ;
            //Sprite2.runAction(cc.moveBy(TimeOfMove_Sprite2,cc.p(delta_X,delta_Y)));
            Sprite2.runAction(cc.moveTo(ReturnDistance(delta_X,delta_Y)*TimeControlerConst_Sprite2,cc.p(Sprite1.getPositionX(),Sprite1.getPositionY())));
            cc.log("move succeed!");
        }

        this.schedule(automoveOfSprite2,0.2);


```
函数部分重写了下,因为计时器调用有间隔,所以把stopAllActions()放在runAction()之前,颠倒顺序的话移动距离太短;
然后,为了控制Sprite2匀速运动,令moveTo的前后两个参数都和位移向量成正比就可以了,现在可以愉快的追赶了。

var TimeControlerConst_Sprite2 = 0.02;

function ReturnDistance (x1,x2) {
    var SquareOfDistance = x1*x1 +x2*x2;
    return Math.sqrt(SquareOfDistance);
}


```
这里是增加的计算向量模的函数。
感谢各位的帮助:866:。
PS:三楼说的方法我想了想,如果又想要精灵灵活移动(刷新速度快)、又想要动作不累加,好像办不到哎╮(╯▽╰)╭。