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

相机位置偏移导致鼠标无法正确获取六边形网格单元的技术问题

解决相机移动后鼠标无法正确选中六边形单元的问题

嘿,我完全懂你现在的困扰——没加相机系统之前,鼠标点哪都能精准选中对应的六边形,结果一加上支持超大网格的相机,移动相机后就彻底乱套了,试了加减相机坐标都不对,肯定急坏了吧?

其实核心问题就是屏幕坐标和世界坐标的转换搞反了。咱们先理清楚逻辑:

  • 你移动相机的时候,绘制六边形网格肯定是把每个六边形的世界坐标减去相机的偏移量,才会在屏幕上显示正确的位置(比如hex.x - cam.x)。
  • 那反过来,鼠标的位置是屏幕坐标,要找到对应的世界里的六边形,就得把屏幕坐标加回相机的偏移量,转换成世界坐标再传给containingHex方法。

给你改好的代码,直接替换原来的片段就行:

if button==3 then
    -- 把鼠标屏幕坐标转换成世界坐标
    local worldX = x + cam.x
    local worldY = y + cam.y
    local hovering = hexGrid:containingHex(worldX, worldY) -- 用世界坐标获取目标六边形
    if hovering then
        local data = hexes.getHexagon(hovering)
        data["text"] = data["text"] == "1" and "2" or "1"
    end
end

要是你的相机还带缩放功能(比如cam.scale),那还得把鼠标坐标先除以缩放系数再加偏移,比如:

local worldX = (x / cam.scale) + cam.x
local worldY = (y / cam.scale) + cam.y

简单说就是:绘制时世界坐标→减相机偏移→屏幕坐标;拾取时屏幕坐标→加相机偏移→世界坐标,方向千万别搞反啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:20:02