You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 06:23:12