求大神教我怎么用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);
},
我试试,先谢大佬!