奥维实验icon
奥维实验
耳内有灰
问题原因:拆除屋檐/柱子时调用的是旧版全局方法 mapData:UninstallRoof(),它只检查已弃用的 self.roofInstalled 全局字段。而实际屋檐数据存储在 wallParts[wk].roofInstalled 中。修复:从 piece.data.wallKey 解析出 anchorRow, anchorCol,改为调用 mapData:UninstallWallParts(row, col),这个方法会正确清除对应墙段的 pillarsInstalled 和 roofInstalled。
【BUG经验】屋檐蓝图跟随鼠标移动

好几轮,都没搞定蓝图跟随鼠标移动,还好找到了老的项目的成功案例,喂给了嗒啦啦 嗒: 核心在以下几处: 1. 点击菜单项进入栽树模式 — BuildMenu.lua:714-727 lua 复制 elseif btn.action == "tree_item" then S.tm.selectedType = btn.treeType S.tm.active = true S.tm.justE

video-5641032
耳内有灰
现在请在游戏中靠近一棵树按 F 键,控制台会打印调试信息,显示:玩家的实际内容坐标 (worldX, worldY)最近树的内容坐标 (treeX, treeY)两者的距离 dist搜索半径 radius树的总数 treeCount这样我就能精确定位是坐标偏差太大、搜索半径太小、还是树数组为空的问题。请截图控制台的调试输出给我看。
耳内有灰
导入成功了!角色在画布上显示正确。关于走动动画,最快的测试方法不需要新功能——你已经有两张正面图(A 和 B 姿态),它们交替就是走路动画:现有素材直接用:帧 素材 说明行走 帧1 dad_front_idle.json (A) 姿态A行走 帧2 dad_front_idle_b.json (B) 姿态B操作步骤:底部切到 “行走” 状态确认 帧 1/2,点"导入" → 选"爸爸-正面站立A"切到 帧 2/2,点"导入" → 选"爸爸-正面站立B"点 “播放” 预览两帧 A/B 姿态交替就是最基础的像素走路动画。后续如果要批量自动化(比如一键导入 3 朝向 × 2 状态 × 2 帧 = 12 张),那时再加一个"批量导入"按钮,根据文件命名规则自动匹配到对应的 方向/状态/帧。但现在手动导入 2 帧就够验证效果了。
耳内有灰
嗒啦啦终于修复:继续修复地形纹理渲染为条纹的 bug。问题已定位:nvgImagePattern 使用了原始纹理尺寸(如 512×512)作为 pattern 大小,但每个 tile 只有 64×64,导致只显示纹理的一小部分。让我先读取当前代码确认状态。问题清晰了。三个渲染路径都需要修复:普通渲染:nvgImagePattern(nvg, ox, oy, texW, texH, ...) → 应改为 (x, y, ts, ts)镜像渲染:同样使用了 texW, texH → 应改为 ts, tsdiagShift 路径:使用 pw = texW * 13,这个逻辑是特殊的大尺寸纹理映射,暂不改动核心修复:将 pattern 大小从原始纹理尺寸改为 tile 尺寸,pattern 起点改为 tile 位置,这样每个 tile 恰好显示一张完整纹理。构建成功。修复内容总结:问题:地形纹理渲染为条纹/斜线,完全看不到素材样貌。根因:nvgImagePattern 的 pattern 尺寸使用了原始纹理尺寸(如 512×512),但每个 tile 的矩形只有 64×64。纹理被映射到 512px 宽的区域上,而 tile 只截取了其中 1/8 的窄条,导致出现条纹。修复:普通渲染:nvgImagePattern(nvg, x, y, ts, ts, ...) — pattern 大小改为 tile 大小,起点改为 tile 位置,每个 tile 恰好显示一张完整纹理镜像渲染:同样改为 nvgImagePattern(nvg, fx, y, ts, ts, ...)diagShift 路径:保持不变(该路径使用 13 倍放大纹理,是专门的对角线纹理逻辑)
耳内有灰
分析两个核心 bug:Bug 1 - 加载界面不显示:beginPreloading() 的"快速路径"调用 PreloadOne() 时,实际执行了加载(不是仅检查缓存),所以 15 个纹理全部同步加载完,allCached=true,直接跳到 setupGameUI(),跳过了加载界面。Bug 2 - 预加载无效,地图仍然渐进加载:预加载用的 NVG 上下文来自 ImageCache.GetContext(),但当 MapCanvas:Render(nvg) 被调用时,它传入的 nvg 参数再次调用 TerrainRegistry.SetNVG(nvg) — 如果这两个 nvg 的 Lua userdata 身份不同(即使指向同一个底层对象),nvg_ ~= nvg 判断为 true,整个 texCache_ 被清空!解决方案:移除快速路径,添加一个仅检查缓存的方法(不加载)不在 beginPreloading 中设置 NVG 上下文,而是让预加载在 HandleUpdate 中进行,并确保使用的 NVG 上下文与 MapCanvas 后续使用的完全相同但根本问题是:我们无法保证 ImageCache.GetContext() 返回的 userdata 与 Widget Render(nvg) 回调中的 nvg 是同一个 Lua 对象引用。让我先验证这一点。