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 );
逻辑说明
- 角度计算必须在世界空间进行:不管相机如何移动,玩家与鼠标的世界位置关系是固定的,这样角度不会随相机偏移出错。
- 绘制时才需要将世界坐标转换为屏幕坐标(叠加相机偏移),这部分你原代码的处理是正确的。
修改后,无论相机如何移动,玩家朝向鼠标的角度都会保持准确,同时不影响玩家与相机单独移动的过场动画需求。
内容的提问来源于stack exchange,提问作者Tobi PL
相关产品推荐
相关产品推荐

