【BUG经验】边缘地形内容又溢出到调色板
前天 19:28综合
继续修BUG:边缘区域的地形内容又溢出到调色板 UI 上面了
嗒啦啦:
nvgScissor → nvgIntersectScissor:不再替换父级 scissor,而是与父级 Panel 的 overflow="hidden" 设置的 scissor 取交集
这个 scissor 调用在旋转/缩放变换之前,当前坐标空间没有旋转,不会有之前的 AABB 膨胀问题
父级 scissor 限制了整个 row 区域,canvas scissor 进一步限制到画布范围,两者交集确保地形内容不会溢出到调色板上
修复 1 — MapCanvas 使用 nvgScissor 代替 nvgIntersectScissor
在 MapCanvas:Render() 中,将画布区域裁剪从 nvgIntersectScissor 改为 nvgScissor。nvgScissor 设置的是精确的硬裁剪矩形,不受后续变换空间中 nvgIntersectScissor 的 AABB 膨胀干扰。画布区域一定在父级 overflow="hidden" 区域内,所以不需要取交集。
修复 2 — AutoTiler 统一 4×tile pattern 方案
AutoTiler 的 makeTexturePaint 和 makeFlippedTexturePaint 之前使用原始纹理尺寸(512×512 或 1024×1024)甚至 13 倍放大(diagShift)作为 pattern size。现在统一改为 4*ts(256×256),与 _RenderTerrain 保持一致,避免大 pattern 在 iso+旋转变换空间中产生条纹失真。
修复方案与之前成功的经验一致:移除旋转变换空间内的 nvgIntersectScissor。
外层 MapCanvas 的 nvgScissor(nvg, layout.x, layout.y, layout.w, layout.h) 在变换之前设置,提供精确的硬裁剪矩形,不受后续旋转/缩放变换的 AABB 膨胀影响,足以将所有绘制内容限制在画布区域内。AutoTiler 里的 nvgIntersectScissor 是在旋转变换空间内调用的,会因 AABB 近似导致裁剪区域膨胀,反而破坏外层裁剪效果。请预览验证。



