RPG节点跟随

队伍跟随功能

玩过RPG的玩家,大部分对队伍跟随这个应该不陌生。简单解释下
就是在一个队伍中有n个队员(n>1) 其中邻头的为队长,其他为队员。
玩家操作 控制队伍(队长)移动,队员跟随队长移动。

  • 跟随移动
    每个队员跟随上一个队员移动

  • 想法
    最开始是看到Api中有cc.follow这个函数的。但发现,这个方法实现不了想要的功能。瞎琢磨了许久,想到了用坐标线性插值来做。感觉效果还过的去,但对比RPG Maker的跟随功能感觉还是要差上一样。求大神的写法,改进。

  • 坐标线性插值方法的实现
    /** 四方向转cc.v2 上 下 左 右 */ let row = [cc.v2(0,1),cc.v2(0,-1),cc.v2(-1,0),cc.v2(1,0)]; /** 上一个队员的坐标 */ let p = this.sirdar.node.position; /** 上一个队员的方向 */ let dir = this.sirdar.dir; /** 上一个队员的状态(移动,静止 等) */ let state = this.sirdar.state; /** 设置当前角色的方向为上一个队员的方向 */ this.dir = dir; /** 设置当前角色的状态为上一个队员的状态(主要是播放移动,静止等动画用) */ this.state = state; /** 设置当前角色将要移动到的位置(与上一个队员的位置要有间隔,不然就重叠在一起了) */ let p1 = p.sub(row[this.dir].mul(40)); /** 坐标线性插值 0.1比较合适,如果是1那么当前角色在队长转换方向时的移动就很生硬,如果是0.01当前角色移动就太慢了 这个看个人的微调 */ this.node.position = this.node.position.lerp(p1,0.1)

  • 不会截gif图,就来张静态的效果图吧

2赞