下载 App

留言墙牌匾设计

05/041 浏览
1. 列表项跳转 + 返回定位
VirtualList 本身只渲染可见行,点击跳转到砖块详情不会有性能问题。返回定位的方案:
牌匾弹窗(VirtualList,记住 scrollOffset)
   ↓ 点击某条留言
砖块详情弹窗(showBrickViewModal)
   ↓ 关闭
牌匾弹窗(恢复之前的 scrollOffset)
实现方式:打开砖块详情前,记录当前 VirtualList 的 scrollOffset。砖块详情关闭后,重新打开牌匾弹窗并用 setScrollOffset() 恢复到之前的位置。用户感知上就是"返回到刚才看的楼层"。
2. 牌匾编辑 → 编辑器右键菜单
从截图看,编辑器模式已有右键气泡"拆除"。方案:
场景 右键牌匾区域 点击牌匾区域
编辑器模式 气泡显示 “编辑” + “拆除” 无操作(或同样弹气泡)
游戏模式 无反应 弹出留言汇总弹窗
“编辑” → 打开字库选字弹窗(现有 showCharLibraryModal)
“拆除” → 清空牌匾字 + 确认提示
游戏模式下牌匾不可编辑/拆除,只能查看留言汇总
3. 空留言处理
单砖无文字 → 列表中不显示该砖
全部砖都无文字 → 弹窗内显示"暂无留言"居中占位
4. 弹窗内直接点赞
每条留言卡片上显示 👍 按钮 + 计数,点击直接 +1 并同步云端,无需进入砖块详情。
汇总设计
┌──────────── 留言墙 · 共 42 条 ────────────┐
│  [VirtualList, bounces=false, no scrollbar] │
│                                             │
│  ┌─────────────────────────────────────┐   │
│  │ "大漠孤烟直,长河落日圆"              │   │
│  │ 👍 28  💬 12           · 2小时前     │   │
│  └─────────────────────────────────────┘   │
│                                             │
│  ┌─────────────────────────────────────┐   │
│  │ "今天天气真好"                        │   │
│  │ 👍 15  💬 3            · 5小时前     │   │
│  └─────────────────────────────────────┘   │
│  ...                                        │
└─────────────────────────────────────────────┘
交互流程:
👍 → 直接点赞,计数 +1,同步云端
💬 或点击卡片其他区域 → 跳转砖块详情(看完整评论/回复)
关闭砖块详情 → 返回牌匾弹窗,恢复滚动位置
生成正面、背面、侧面,可以走动的角色形象截图
生成正面、背面、侧面,可以走动的角色形象
当前 NPC 角色编辑器的数据结构 编辑器使用 32×32 像素画布,数据结构大致是: 3 个朝向:正面、背面、侧面 2 个动画状态:静止(idle)、行走(walk) 每个状态可以有多帧,支持帧率控制 每帧本质上是一个 32×32 的颜色数组 要解决的 3 个问题 步骤 问题 方案 1. 图片→编辑器 128×128 PNG 导入为 32×32 像素数据 加载图片后逐像素采样(每4×4取1像素)
1 赞
9 回复
穿透层修复
经验一:CSS transform 穿透层修复模式 问题本质 当容器使用 CSS transform: translateX/Y/scale 平移/缩放子树时,即使父容器有 overflow = "hidden",引擎的命中检测可能不裁剪越界区域。如果 transform 后的子树有更高的 zIndex,它会在视觉范围外拦截其他兄弟节点的指针事件。 受影响的场景 地图编辑器(右键平移/滚轮缩放后)
官方
4 赞
地图编辑器仿真 tick 重建抑制
UI 重建频率 = 事件分发的可靠性上限。 只要有一帧 SetRoot 销毁了正在处理 pointer 事件的控件,跨重建边界的 Down/Up 对就会被吞。高频仿真 tick 必须在 UI 边界按页面过滤。 关键代码(scripts/main.lua HandleUpdate) 四步走:先原地处理人员 → 聚合所有仿真 changed → 地图页强制压制 → 只放行显式/登录态变化。 -- ma
官方
4 赞
右键拖拽平移
一、问题本质 不是平移公式写错,而是 UrhoX UI 库指针事件派发的两个不对称陷阱叠加: 陷阱 现象 根因文件 OnPointerMove 不向父冒泡 右键按下 isPanning_=true,但 move 事件永远到不了 mapView urhox-libs/UI/Core/Widget.lua(OnPointerDown/Up 有 parent 冒泡,OnPointerMove 没有) H
官方
4 赞
小人的认知系统
这是一个很好的思路。RND 的核心——用"预测误差"度量新奇度,驱动探索——可以直接映射到校园小人的认知系统上,而且不需要真的跑神经网络。下面是方案讨论。 RND 思想到校园小人的映射 RND 原始结构 vs 校园简化版 RND 组件 原始含义 校园小人对应 目标网络(固定随机) 为每个状态生成固定特征 环境的客观快照:房间类型、物件数、人员密度、卫生度、当前时段 预测网络(可训练) 学习预测目标
官方
4 赞
精灵平滑移动、墙碰撞体积
一、 渲染层用连续坐标(scripts/页面/校园地图.lua,三处统一): -- NPC 定位(第408-410行) local contLeft = (character.x or 0) * 5 - 18 - charLeft local contTop = (character.y or 0) * 5 - 36 - charTop -- 主角定位(第504-506行) local con
官方
1 赞
图片加载三层优化设计
目标场景:地图编辑器"物品/墙体/地面/房间/人员"调色板弹窗的图片首帧显示 文档目的:沉淀"图片为什么慢、怎么治、发布后玩家体验如何、未来加资源时 preload_groups 怎么取舍"的完整结论,避免重复踩坑。 一句话结论 WASM 下图片"慢"不是单一问题,而是下载 / 解码 / 上传 GPU 三件事全堆在"玩家点弹窗那一刻"做导致的。优化的本质是把这三件事提前到启动期做(让玩家点的时候图
官方
1 赞
以鼠标为锚点缩放
核心数学原理 缩放前后,鼠标指向的那个世界坐标点必须保持在同一屏幕位置。 已知:旧缩放 oldZoom、新缩放 newZoom、鼠标锚点屏幕坐标 (ax, ay)、当前偏移 (panX, panY) 步骤1:算出旧缩放下鼠标指向的世界坐标 wx = (ax - panX) / oldZoom wy = (ay - panY) / oldZoom 步骤2:新缩放后反解新偏移,让 wx/wy
官方
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 赞
地图编辑器「墙」全链路增强
经验 1:子编辑器"连续操作" vs "一次性操作"——提交后别清空激活态 现象:放完一段墙,提示"可继续拖拽放置",但再拖没反应。 根因:CommitWall 提交后把 selectedItem=nil、tool="select",导致 IsActive() 返回 false,下次 HandlePointerDown 第一行就 return。提示语与行为矛盾。 模式:连续工具(墙、擦除)提交后只
官方
4 赞