下载 App

测试留言没有显示玩家昵称

05/042 浏览
我:测试留言没有显示玩家昵称(没有昵称就显示玩家ID)
嗒:
现在我明白了。日志中的 [Lobby] Identity updated from server: nick_name=耳内有灰 说明 Lobby 系统在连接后异步收到了昵称。但 getPlayerNickname() 在 userId=0 时跳过了 _GetUserNickname 调用。
问题根源:预览环境 _lobby:GetMyUserId() 返回 0,而后面服务端通过 allData.yourUserId 告知了真实 ID。但 getPlayerNickname() 只在第一次调用时尝试拉取。
让我看看服务端告知 userId 后是否有机会重新拉取昵称
lobby 对象没有类型定义。那么换个思路——既然日志显示引擎在连接后确实拿到了 nick_name,而且 _GetUserNickname API 需要 userId,我可以从另一个角度解决:
当服务端通过 Client.myUserId 告知真实 userId 后,再次尝试拉取昵称
同时也尝试直接从 _lobby 读取 identity 中的 nick_name
让我看看 main.lua 中收到服务端同步后的处理逻辑
我看到了!当服务端同步完成后(WallClient.serverReady),main.lua 的 HandleUpdate 会用 Client.myUserId 来重建菜单。我可以在这个时机也重新触发昵称拉取。
现在重写 getPlayerNickname(),让它:
优先使用已缓存的昵称
尝试从 _lobby 读取(userId 可能不是 0)
使用 Client.myUserId 作为备选 userId
异步拉取成功后更新缓存
构建成功。修改总结:
问题根源:预览环境 _lobby:GetMyUserId() 返回 0,导致 getPlayerNickname() 跳过昵称拉取,直接用 "玩家" 兜底。
修复内容:
getPlayerNickname() 改用双源 userId — 先试 _lobby:GetMyUserId(),如果返回 0 则用 WallClient.myUserId(服务端告知的真实 ID)
提取 tryFetchNickname() 辅助函数 — 可在任何时机用有效 userId 发起异步昵称拉取,且自动去重不重复请求
HandleUpdate 中服务端同步后重新拉取 — 当 WallClient.serverReady 且拿到真实 myUserId > 0 时,如果当前昵称还是 "玩家" 或纯数字 ID,立即用真实 ID 重新拉取昵称
这样即使 userId 一开始是 0,等服务端同步后也能正确显示昵称。留言的 author 字段会存储拉取到的昵称(或 ID 作为兜底),并持久化到云端。
生成正面、背面、侧面,可以走动的角色形象截图
生成正面、背面、侧面,可以走动的角色形象
当前 NPC 角色编辑器的数据结构 编辑器使用 32×32 像素画布,数据结构大致是: 3 个朝向:正面、背面、侧面 2 个动画状态:静止(idle)、行走(walk) 每个状态可以有多帧,支持帧率控制 每帧本质上是一个 32×32 的颜色数组 要解决的 3 个问题 步骤 问题 方案 1. 图片→编辑器 128×128 PNG 导入为 32×32 像素数据 加载图片后逐像素采样(每4×4取1像素)
1 赞
9 回复
【日常更新】支持2人、3人、4人对战截图
【日常更新】支持2人、3人、4人对战
优化了排行榜显示玩家昵称
3 赞
地图编辑器仿真 tick 重建抑制
UI 重建频率 = 事件分发的可靠性上限。 只要有一帧 SetRoot 销毁了正在处理 pointer 事件的控件,跨重建边界的 Down/Up 对就会被吞。高频仿真 tick 必须在 UI 边界按页面过滤。 关键代码(scripts/main.lua HandleUpdate) 四步走:先原地处理人员 → 聚合所有仿真 changed → 地图页强制压制 → 只放行显式/登录态变化。 -- ma
官方
4 赞
穿透层修复
经验一:CSS transform 穿透层修复模式 问题本质 当容器使用 CSS transform: translateX/Y/scale 平移/缩放子树时,即使父容器有 overflow = "hidden",引擎的命中检测可能不裁剪越界区域。如果 transform 后的子树有更高的 zIndex,它会在视觉范围外拦截其他兄弟节点的指针事件。 受影响的场景 地图编辑器(右键平移/滚轮缩放后)
官方
4 赞
右键拖拽平移
一、问题本质 不是平移公式写错,而是 UrhoX UI 库指针事件派发的两个不对称陷阱叠加: 陷阱 现象 根因文件 OnPointerMove 不向父冒泡 右键按下 isPanning_=true,但 move 事件永远到不了 mapView urhox-libs/UI/Core/Widget.lua(OnPointerDown/Up 有 parent 冒泡,OnPointerMove 没有) H
官方
4 赞
以鼠标为锚点缩放
核心数学原理 缩放前后,鼠标指向的那个世界坐标点必须保持在同一屏幕位置。 已知:旧缩放 oldZoom、新缩放 newZoom、鼠标锚点屏幕坐标 (ax, ay)、当前偏移 (panX, panY) 步骤1:算出旧缩放下鼠标指向的世界坐标 wx = (ax - panX) / oldZoom wy = (ay - panY) / oldZoom 步骤2:新缩放后反解新偏移,让 wx/wy
官方
1 赞
自动寻路赠送
核心功能 携带模式(点击物品跟鼠标)下: ≤8格:点击小人直接赠送(金色边框) >8格:点击远距离小人 → 自动寻路走向目标 → 到达8格内自动赠送 取消:玩家按方向键/WASD/摇杆手动移动 → 立即取消,恢复物品 关键经验(3条踩坑教训) 经验1:类型标识不是中文,是英文枚举值 地图编辑器放置的角色 type/job 字段是英文标识(teacher_3、doctor、cleaner_2、tea
官方
1 赞
编辑器实体 zIndex 层级
问题 编辑器中墙段被房间面板覆盖不可见。原因:给房间设 zIndex=1 会创建 stacking context,其内部带背景色/TiledImage 的 floorLayer 作为 paint layer 在合成时盖过了同层级 zIndex=2 的墙段——差距太小不够可靠。 解决:底层不设 zIndex,上层用明显间距 错误做法(zIndex 间距太小 + 给底层也设 zIndex): --
官方
1 赞
围墙空气墙
问题根源 原系统用单点碰撞(Round(nx), Round(ny) 只检测中心1个点),角色精灵 36px(7.2格) 宽,中心停在 x=0.5 时精灵左半完全覆盖 5px 围墙,视觉"穿墙"。 1. AABB 矩形碰撞检测 — scripts/小人/导航.lua -- 角色碰撞体尺寸(格):脚底占据的地面矩形 -- 半宽 0.5 格(2.5px),半高 0.3 格(1.5px) local A
官方
1 赞
图片加载三层优化设计
目标场景:地图编辑器"物品/墙体/地面/房间/人员"调色板弹窗的图片首帧显示 文档目的:沉淀"图片为什么慢、怎么治、发布后玩家体验如何、未来加资源时 preload_groups 怎么取舍"的完整结论,避免重复踩坑。 一句话结论 WASM 下图片"慢"不是单一问题,而是下载 / 解码 / 上传 GPU 三件事全堆在"玩家点弹窗那一刻"做导致的。优化的本质是把这三件事提前到启动期做(让玩家点的时候图
官方
1 赞