让鱼动起来

鱼动起来的原理就是通过设置鱼的坐标来实现,而设置什么值呢?

很明显,我们是通过移动鼠标来控制鱼,那当然是我们鼠标的坐标。

在 init.ts 里面声明俩个变量来保存我们的鼠标坐标,并且通过监听我们的鼠标移动事件,来获得我们鼠标的坐标。

  • 声明变量

let mouse_x: number, // 鱼的x坐标,和鼠标x的坐标
    mouse_y: number; // 鱼的y坐标,和鼠标y的坐标,因为鼠标在哪鱼在哪,所以重合。
  • 创建监听函数

这里的 offset 会比 layer 大 1

// 鼠标移动监听函数
function mouseMove(e: MouseEvent) {

  // offset = layer + 1

  if(e.offsetX || e.layerX) {
    mouse_x = typeof e.offsetX == undefined ? e.layerX : e.offsetX
    mouse_y = typeof e.offsetY == undefined ? e.layerY : e.offsetY
  }

  console.log(mouse_x);
  console.log(mouse_y);
}
  • 修改 init 函数,为 canvas one 添加事件监听

  • 添加导出

  • 在 fish-mother.ts 使用坐标,首先先导入。

  • 更新 draw 函数

  • 创建一个带有缓冲功能的函数

此时移动你的鼠标,你会发现这个鱼动的太硬了,完全贴着鼠标。

每一次设置值只是设置一个趋近于鼠标位置的值,这样就会有一个渐变的过程,就不会那么突然。

而不是直接就等于,当鼠标与鱼的位置重合时,lerpDistance 就返回的 aim

新建 utils.ts 文件

我们来模拟一下这个函数的运行环境。

第一帧时

第二帧,此时的 cur = 19

第三帧,此时 cur = 18.1

此时只是无线趋近,而不是真正的等于。这里的3帧动画只是花了几十毫秒而已。

  • 在 fish-mother.ts 中使用这个函数

再次试一试,看看鱼儿是如何动起来的。

Last updated