易玩(上海)网络科技有限公司
公司地址:上海市静安区灵石路 718 号 B1 北楼
注册地址:上海市闵行区紫星路 588 号 2 幢 2122 室
投诉举报邮箱:kefu@taptap.com
编辑器实体 zIndex 层级
问题编辑器中墙段被房间面板覆盖不可见。原因:给房间设 zIndex=1 会创建 stacking context,其内部带背景色/TiledImage 的 floorLayer 作为 paint layer 在合成时盖过了同层级 zIndex=2 的墙段——差距太小不够可靠。解决:底层不设 zIndex,上层用明显间距错误做法(zIndex 间距太小 + 给底层也设 zIndex):--
以鼠标为锚点缩放
核心数学原理缩放前后,鼠标指向的那个世界坐标点必须保持在同一屏幕位置。已知:旧缩放 oldZoom、新缩放 newZoom、鼠标锚点屏幕坐标 (ax, ay)、当前偏移 (panX, panY)步骤1:算出旧缩放下鼠标指向的世界坐标 wx = (ax - panX) / oldZoom wy = (ay - panY) / oldZoom步骤2:新缩放后反解新偏移,让 wx/wy
门与墙
核心设计原则原则 说明格子像素≥精灵尺寸 32px格+36px精灵≈1.1格,比例合理渲染连续+碰撞格级 平滑移动不跳格,碰撞按格检测脚底小盒碰撞 半宽<0.5格,站门格不触邻墙门优先于墙 BuildBlockedCells两遍扫描,passable覆盖blocked后建覆盖先建 门墙同格互斥,门替换墙智能路由 门工具按位置自动选择装门/建独立门错误1 → 正确1:格子比例失衡-
碰撞方案
核心教训1. 格子像素必须匹配精灵尺寸 5px格子+36px精灵=7.2:1比例,任何碰撞方案(AABB/空气墙/单点/格中心)都无法同时满足"不穿墙+四面间距一致+不跳格"。对齐环世界32px后,36px精灵≈1.1格,问题根本解决。2. 连续渲染 + 格级碰撞的分层设计 渲染用连续坐标 x*S-18(平滑不跳),碰撞用格级检测(不穿墙),二者解耦。3. 精灵大于格子时,单点检测必然不对称
精灵平滑移动、墙碰撞体积
一、 渲染层用连续坐标(scripts/页面/校园地图.lua,三处统一):-- NPC 定位(第408-410行)local contLeft = (character.x or 0) * 5 - 18 - charLeftlocal contTop = (character.y or 0) * 5 - 36 - charTop-- 主角定位(第504-506行)local con
围墙空气墙
问题根源原系统用单点碰撞(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
自动寻路赠送
核心功能携带模式(点击物品跟鼠标)下:≤8格:点击小人直接赠送(金色边框)>8格:点击远距离小人 → 自动寻路走向目标 → 到达8格内自动赠送取消:玩家按方向键/WASD/摇杆手动移动 → 立即取消,恢复物品关键经验(3条踩坑教训)经验1:类型标识不是中文,是英文枚举值地图编辑器放置的角色 type/job 字段是英文标识(teacher_3、doctor、cleaner_2、tea
图片加载三层优化设计
目标场景:地图编辑器"物品/墙体/地面/房间/人员"调色板弹窗的图片首帧显示 文档目的:沉淀"图片为什么慢、怎么治、发布后玩家体验如何、未来加资源时 preload_groups 怎么取舍"的完整结论,避免重复踩坑。一句话结论 WASM 下图片"慢"不是单一问题,而是下载 / 解码 / 上传 GPU 三件事全堆在"玩家点弹窗那一刻"做导致的。优化的本质是把这三件事提前到启动期做(让玩家点的时候图
槽位变更只走原子方法
经验下标 = 视觉格子,空槽是合法状态。定长 9 槽,inventory[i]=nil 即第 i 格空着,中间允许空。任何"把物品往前挪/压缩/重排"的操作都会让"你看到的格子"和"数组真实下标"脱节 → 物品消失。渲染直映 inventory[i],数据层绝不重排。稀疏表禁用 #。带 nil 洞的表 #inv 是未定义的(可能=0 直接读成空包,或=洞前边界)。所有遍历上界一律 Player
拾取 / 丢弃物品
拾取的坑是「点击被遮挡」,丢弃的坑是「坐标反解会偏」。两者解法都是绕开复杂机制、用最直接的方式。问题 根因 解法走到物品旁点不动、捡不起来 物品命中层和主角标记同层、都无 zIndex,数组顺序靠后的主角标记盖在上面,点击命中的是主角而非物品 给可交互物品显式 zIndex = 20拖拽丢东西飞到远处 用 ScreenToWorld 把鼠标像素反解成世界坐标当落点,依赖 zoom/offse
空空如也
也许宝藏只是换了个藏身之处