相机位置偏移导致鼠标无法正确获取六边形网格单元的技术问题
解决相机移动后鼠标无法正确选中六边形单元的问题
嘿,我完全懂你现在的困扰——没加相机系统之前,鼠标点哪都能精准选中对应的六边形,结果一加上支持超大网格的相机,移动相机后就彻底乱套了,试了加减相机坐标都不对,肯定急坏了吧?
其实核心问题就是屏幕坐标和世界坐标的转换搞反了。咱们先理清楚逻辑:
- 你移动相机的时候,绘制六边形网格肯定是把每个六边形的世界坐标减去相机的偏移量,才会在屏幕上显示正确的位置(比如
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
相关产品推荐
相关产品推荐

