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

2D RPG游戏相机移动时两点间角度计算异常问题求助

问题解决:相机移动后玩家朝向鼠标角度异常

问题根源

你搞反了屏幕坐标与世界坐标的转换逻辑:

  • 鼠标坐标qMouse是屏幕坐标,要得到对应的世界坐标,应该用屏幕坐标 - 相机偏移,而非加上相机坐标。
  • 玩家坐标Shelly.x/y是世界坐标,计算角度时不需要叠加相机坐标——角度是世界空间中玩家到鼠标的方向,和相机位置无关。

修正后的代码

角度计算部分

// 把鼠标屏幕坐标转换为世界坐标
qVec2d mouseWorldPos = qVec2d{qMouse.x - Camera.x, qMouse.y - Camera.y};
// 直接使用玩家的世界坐标
qVec2d playerWorldPos = qVec2d{Shelly.x, Shelly.y};
// 计算世界空间内玩家到鼠标的角度
qAngle = qGetAngle2(mouseWorldPos, playerWorldPos);
Angle = qAngle; // 仅用于调试的类型转换

画线部分(原逻辑正确,保留即可)

ShellyWindow.qDraw_Line(
    Shelly.x + Camera.x, // 玩家世界坐标转屏幕坐标(起点)
    Shelly.y + Camera.y,
    (sin(0.01744 * qAngle) * 140) + Shelly.x + Camera.x, // 终点世界坐标转屏幕坐标
    (cos(0.01744 * qAngle) * 140) + Shelly.y + Camera.y,
    0x00FF00
);

逻辑说明

  1. 角度计算必须在世界空间进行:不管相机如何移动,玩家与鼠标的世界位置关系是固定的,这样角度不会随相机偏移出错。
  2. 绘制时才需要将世界坐标转换为屏幕坐标(叠加相机偏移),这部分你原代码的处理是正确的。

修改后,无论相机如何移动,玩家朝向鼠标的角度都会保持准确,同时不影响玩家与相机单独移动的过场动画需求。

内容的提问来源于stack exchange,提问作者Tobi PL

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 02:57:25