奥维实验icon
奥维实验
耳内有灰
WASM 下完整链路玩家打开分享链接 (WASM)  → background_match 秒连 → ServerReady  → Server 实例启动  → serverCloud:Get(0, "wall_bricks_all")   ← 1 次读,全量加载  → SYNC_ALL → 客户端合并 → 壁上看到所有人的留言 ✅玩家点"发送"  → RemoteEvent → Server 入队  → FlushWriteQueue: Get → 合并 → Set   ← 写完即持久化  → broadcastBrickUpdate → 客户端立即看到 ✅玩家刷新页面 / 重新进入  → 新 Server 实例启动  → serverCloud:Get(0, "wall_bricks_all")   ← 读到上次写入的数据  → SYNC_ALL → 留言还在 ✅每个环节都是确定性的:预加载:1 次 Get,不依赖注册表,不会遗漏写入:RMW 写完 serverCloud:Set 返回即入云,不存在"队列没 flush"的窗口重进:新实例同一个 key 直接读,数据完整对比当前方案为什么 WASM 下会丢当前方案的断裂点:  serverCloud.list:Add("brick_31", data)  ← 数据入云了  registerBrickId(31)                      ← 异步,可能没写完  玩家刷新页面                              ← 服务器销毁  新服务器 → 读注册表 → 没有 31 → 不去加载 → 留言"消失"单 key 整包方案没有这个断裂点,因为数据和索引是同一个东西。旧代码处理serverCloud.list + 注册表的代码注释保留,不删。后面如果需要按交互类型做审计日志(谁在什么时间点了什么赞),list 的逐条记录模式更合适,可以从冷宫捞回来做"热数据整包 + 冷数据 list 归档"的双写。确认方向没问题的话,我就开始改 Server.lua。
耳内有灰
修改总结:main.lua 中 EnterGame() 的加载策略改为:优先从静态文件加载 — MapData.Load("data/default_map.json"),这个文件会随构建打包,所有用户(包括分享链接)都能读到静态文件不存在时回退 clientCloud — 保留原有的云端加载逻辑,方便本地开发调试clientCloud 也不可用时 — 显示友好提示"地图未就绪"保存逻辑也做了防护 — saveMapToCloud() 会检查 clientCloud 是否存在,不存在时跳过云端保存,避免报错。关键点:我之前的修改只在**“玩家入口”**(EnterGame())中添加了静态文件加载,编辑器仍然从 clientCloud 读取——所以分享链接上的编辑器看到的是不同用户的 clientCloud 数据。请你在分享链接上点击**“玩家入口”**按钮测试——那里才是从静态文件 default_map.json 加载地图的路径。不过,编辑器也应该在启动时自动加载静态地图作为默认内容。让我加上这个逻辑。问题原因是 MapData.Load() 使用 fileSystem:FileExists() 检查文件存在性——这个 API 检查的是原始文件系统路径,在 WASM 中无法找到已打包的资源文件。改用 cache:GetFile() 后,会从引擎的资源缓存中搜索,可以正确找到构建打包的文件。
耳内有灰
实现内容总结:测量牌匾区域 — 通过 PIL 分析 roof_mid.png(152×217),确定牌匾木板区域为 x=20…132, y=104…142,转换为比例常量添加比例常量(约 1786 行):PLAQUE_LEFT_RATIO = 0.1316,PLAQUE_RIGHT_RATIO = 0.8684PLAQUE_TOP_RATIO = 0.4793,PLAQUE_BOTTOM_RATIO = 0.6544牌匾隐形框+悬停检测(_RenderRoof 步骤 7c):根据中段位置 (roofLeft + capW, roofTop) 和中段尺寸 (midW, roofH) 乘以比例,计算牌匾矩形将鼠标屏幕坐标通过 ScreenToContent → 逆旋转 → 逆缩放,转换到 counter-rotation local 空间鼠标在牌匾矩形内时,绘制 2px 红色描边边框请预览测试 — 鼠标移到屋檐中段的牌匾区域上时应该出现红色边框。
耳内有灰
嗒啦啦终于修复:继续修复地形纹理渲染为条纹的 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 倍放大纹理,是专门的对角线纹理逻辑)