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