JavaScript武器开发问题:鼠标距玩家越远射速越快
问题根源与解决方案
你的问题出在方向向量计算错误且未做归一化处理上:
- 当前代码里
trajectory.x = mousePos.x + player.x的逻辑完全错误,方向向量应该是鼠标相对玩家的偏移量(鼠标位置减去玩家位置) - 就算修正为偏移量,未归一化的向量长度会随鼠标与玩家的距离变化,导致每帧移动距离=向量长度×speed,距离越远移动越快,视觉上就表现为“射速越快”
修正步骤与代码
1. 正确计算并归一化方向向量(鼠标位置更新时执行)
// 计算鼠标相对于玩家的偏移量(核心方向向量) const dx = mousePos.x - player.x; const dy = mousePos.y - player.y; // 计算向量的实际长度(鼠标到玩家的直线距离) const distance = Math.sqrt(dx * dx + dy * dy); // 归一化向量:将向量长度缩为1,消除距离对移动速度的影响 let trajectoryX = 0; let trajectoryY = 0; if (distance > 0) { // 避免鼠标与玩家重合时出现除以0的错误 trajectoryX = dx / distance; trajectoryY = dy / distance; } // 更新trajectory对象 trajectory.x = trajectoryX; trajectory.y = trajectoryY;
2. 保持每帧移动代码不变
x = x + (trajectory.x * speed); y = y + (trajectory.y * speed);
原理说明
归一化后的方向向量长度始终固定为1,因此每帧子弹移动的距离就是speed的固定值,不会随鼠标与玩家的距离变化,彻底解决“鼠标越远射速越快”的异常。
内容的提问来源于stack exchange,提问作者loglot
相关产品推荐
相关产品推荐

