背景:一个人物模型Actor与一张地图map,在地图上人物随意移动,比如能从A点到B点,或A点到B点过程中用户点击C点,那么改变移动方向到C点,在移动结束后执行其它人物动作Action
路径移动
首先我们能联想到的是cc.moveBy或cc.moveTo实现一格的移动,通过给出的路径path[ point1 , point2, ..., B]到达B点。
1. 生成路径path: generatePath(A, B, map?)(函数实现略)
2. 添加路径并移动: Actor.move(path)
move(
path){
if(
path ==
null ||
path ==
undefined ||
path.
length ==
0 )
return;
else{
this
.
path
=
path
;
this.
_move(
path);
}
}
3. 一格移动: Actor._move(point)
_move(
path){
// path = [ point1 , point2, ..., B]
if(
this.
moveActions!=
null && !
this.
moveActions.
isDone()) {
// 上个动作没有完成,记录下path等之后完成
this.
path =
path;
return;
}
else{
this.
moveActions =
new
cc.
ActionInterval();
let
nextSite =
this.
path.
splice(
0,
1)[
0];
if(
nextSite){
// 换算成网格移动所需要的x, y
let
x = (
nextSite.
x -
this.
actor.
x) *
this.
node.
width,
y = - (
nextSite.
y -
this.
actor.
y) *
this.
node.
height;
// cc.moveBy移动一格,通过cc.sequence与cc.callFunc组合,实现移动一格结束后的回调
this.
moveActions =
cc.
sequence(
cc.
moveBy(