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:三楼说的方法我想了想,如果又想要精灵灵活移动(刷新速度快)、又想要动作不累加,好像办不到哎╮(╯▽╰)╭。