求大神教我怎么用cocos creator js 实现 snake vs blocks

求大神教我怎么用cocos creator js 实现 snake vs blocks 中蛇体运动的逻辑,要求蛇头带动身体节点,且运动时各节点间不能有空隙,一直解决不了

cocos没用多久,自己瞎琢磨的,顺求大神优化


思路:记录头部轨迹,在轨迹上按长度排列身体

/**
 * 根据头部位置排列
 */
queueByHead: function () {
    let lastPer = 0;
    for (let i = 1; i < this._bodies.length; i++) {
        lastPer = this.getPerByDistance(lastPer, bodyR);
        let pos = this.getPosByTrackPer(lastPer);
        this._bodies[i].node.setPosition(pos);
    }
},
/**
 * 从basePer开始找到距离distance的per
 */
getPerByDistance: function (basePer, distance) {
    let tempI = Math.floor(basePer);
    let sum = 0;
    while (sum < distance) {
        if (tempI >= this._tracks.length - 1) break;
        let lessPer = 1 - basePer % 1;
        let d = cc.pDistance(this._tracks[tempI], this._tracks[tempI + 1]);
        if (sum + d * lessPer >= distance) {
            return (distance - sum) / d + basePer;
        }
        sum += d * lessPer;
        tempI++;
        basePer = tempI;
    }
    return this._tracks.length - 1;
},
/**
 * 根据per获取轨迹上的坐标
 */
getPosByTrackPer: function (per) {
    if (per % 1 === 0) return this._tracks[per];
    let point1 = this._tracks[Math.floor(per)];
    let point2 = this._tracks[Math.ceil(per)];
    per = per % 1;
    let x = (point2.x - point1.x) * per + point1.x;
    let y = (point2.y - point1.y) * per + point1.y;
    return cc.v2(x, y);
},

我试试,先谢大佬!