跳转至

实体在平面坐标系上移动

该方法是绑定在特定对象上的方法,该对象具有长度为 2 的数组 pos 属性记录坐标。

代码

/**
 * 实体在平面坐标系上移动
 * @param {Number} angle 角度
 * @param {Number} [distance] 移动距离
 * @returns {Array<Number>} 移动后的坐标
 */
function move(angle, distance) {
    if (distance <= 0) return this.pos;
    if (angle >= 360 || angle <= -360) return; 
    let x = this.pos[0];
    let y = this.pos[1];

    switch (angle) {
        case 0:
            x += distance;
            break;

        case 90:
        case -270:
            y += distance;
            break;

        case 180:
        case -180:
            x -= distance;
            break;

        case 270:
        case -90:
            y -= distance;
            break;

        default:
            let dx = Math.cos(angle * Math.PI/180) * distance + x;
            let dy = Math.sin(angle * Math.PI/180) * distance + y;
            return this.pos = [dx, dy];
    }

    return this.pos = [x, y];
}

效果

  • 若移动距离小于等于 0,则不移动,返回实体当前坐标。
  • 若角度大于 360 或小于 -360,则失败,返回空值。
  • 其余情况下,移动成功,返回移动后的坐标。