# lanemap-editor **Repository Path**: axisxy/lanemap-editor ## Basic Information - **Project Name**: lanemap-editor - **Description**: A local-first 2D map and level editor for assembling image-based maps, painting walkability grids, managing layered scenes, and exporting Tiled-compatible game data. - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-07-26 - **Last Updated**: 2026-07-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 巷图(LaneMap Editor) 巷图是一个纯 Web 的 2D 地图与关卡编辑器,在浏览器中完成素材导入、地图编辑、工程保存和运行时导出。当前版本专注于一个高频工作流:导入或拼接地图图片,配置正交/45° 网格,然后快速刷出可行走区域,并把背景、对象和人物上方遮挡内容分层导出。 交付目标是在纯 Web 范围内完整覆盖 Tiled 1.12.2 的地图编辑功能、文件格式、官方导出器和浏览器沙箱 JavaScript 扩展能力,同时保留比通用瓦片编辑器更短的“图片地图 → 行走网格 → Demo 验证”路径。桌面外壳、Windows 安装包、CLI、编辑器自动启动/托管或核心功能必需的外部进程、在线托管与部署、国际化、无障碍和内置帮助系统不属于目标。智能遮挡拆层允许用户显式连接独立、可选且可完全降级的本机推理服务;它不是工程后端或 Web 静态交付物。施工清单中的条目全部属于最终交付范围,不设置 MVP 截止线。 ## 当前状态 当前代码版本为 `0.1`,已经支持: - 打开地图时会自动出现类似 ChatGPT 的“地图助手”浮窗,可直接说“切换到行走笔刷”“隐藏网格”“把指定矩形设为阻挡”“撤销”,或描述要生成的地图。常用命令优先在浏览器本地解析;其余请求只把精简地图语义上下文交给 DeepSeek `deepseek-v4-pro`,并在本地校验成受限、可撤销的地图动作,不执行模型脚本。生成请求继续使用版本化语义计划,本地再按“道路图与连续代价场 A* → 带门口 socket 的街区模块约束回溯 → 边缘密度场与 Poisson 树林 → Wang 式道路收边 → 出口和建筑门口连通性修复”确定性生成地图;预览确认前不覆盖当前文档; - 自动加载内置 `imgs`,授权一个或多个工程/素材目录后自动发现其中图片,并与上传素材汇总到同一素材库; - 按图片尺寸、文件名行列元数据(如 `r2c3`)或绝对锚点(如 `x128_y-32`)自动拼图;已放置图片可按面板中配置的行、列和锚点再次重排; - 图片支持拖放、像素与边缘/中心吸附、参考线、自由移动、缩放、旋转、双轴翻转、透明度、重复和保持世界位置的跨层移动;变换写入原生工程,并通过 Tiled 自定义属性完整往返; - 拼图检查会报告缺失资源、同层重叠、画布空洞、原始尺寸不一致和不一致间距;屋顶、树冠和遮挡命名资源可一键移到人物上方层; - 背景层、对象层、高层遮挡层、行走层; - 正交、45° 等距、交错等距、交错六边形和斜投影网格; - 网格尺寸、原点、颜色、透明度和屏幕像素线宽调整;主 Canvas 的 DOM 与显存窗口只覆盖当前视口及安全边界,整张大地图不再直接创建同尺寸画布; - 可显示 2–32 级细分网格,地图外网格仍可平移和缩放;视图偏好保存在浏览器本地,不污染工程文件; - 支持当前层高亮、其他层淡化、视图中心或鼠标指针锚定缩放、适合窗口、100%、滚轮平移/缩放、空格/中键平移、中键自动滚动和方向键滚动; - 行走笔刷、擦除、笔刷大小、全填充、反选、魔棒、批量选区和清空;每格可设置可行走、阻挡、单向、跳跃、浅水或危险状态,以及成本、方向、区域 ID 和标签; - 多导航通道、孤岛/窄口/不可达边缘/跨通道冲突诊断和 A* 路径成本预览;独立导航 JSON 支持稀疏坐标、RLE、位图与分块表示,并兼容旧 `"a,b"` 行走集合; - 遮挡标注笔刷,按格从当前地图裁出透明遮挡图块; - 带可读动作名的撤销/重做、项目 JSON、行走掩码 JSON 和 PNG 导出;历史使用可逆差异压缩,默认限制为 60 项/96 MB,并在状态栏显示实际占用; - 遮挡图集 PNG 与运行时定位清单 JSON 导出; - 普通地图 PNG 默认排除行走/遮挡数据覆盖,另有包含两类标注的调试 PNG;TMJ/TMX 可把导航映射为多边形对象层、带透明标记瓦片集的特殊瓦片层,或 `lanemap:navigation` 命名空间属性; - 文件、编辑、视图、地图、图层、对象、瓦片集、世界和工具菜单共用统一动作表;`Ctrl+Shift+P` 可搜索菜单、工具和脚本扩展动作,画布右键菜单复用同一动作实现; - “工具 → 快捷键设置”完整列出 Tiled 1.12.2 的 General、Tile Layer、Object Layer 和 Properties 默认键盘/鼠标手势;键盘绑定可搜索、添加、删除、恢复默认并以 JSON 导入导出,瓦片层与对象层同键按上下文分派。冲突会高亮并阻止歧义执行,macOS 自动显示 Command 且把 Meta 事件映射为同一语义;浏览器不能可靠执行的“退出 Tiled”会明确标注为 Web 不支持并拦截误触。快捷键偏好只保存在当前浏览器,不进入工程; - “编辑 → 偏好设置”覆盖保存/加载、导出、编辑器界面和主题:可启停瓦片图片变化重载与会话恢复,选择带字节数和 SHA-256 回读验证的安全写入,按文档重复最近导出,并统一控制嵌入瓦片集、解除模板、解析有效类型/属性和最小化输出;网格颜色、细网格、对象屏幕像素线宽、跨层对象选择、滚轮、中键自动滚动、平滑滚动及浏览器 Canvas 加速提示均即时生效。界面提供 Tiled Fusion/浏览器原生、浅色/深色、基础色、选择色、本机字体和 75%–200% UI 缩放,新浏览器默认使用 125% 以避免工具栏、状态栏和面板文字过小,全部只保存在当前浏览器; - 数字输入统一支持键盘、滚轮和安全算术表达式(四则、幂、括号、`min/max/round` 等函数及 `+=`/`-=` 相对输入),结果按控件 `min`/`max`/`step` 自动归一化;当前工具、前一工具、吸附/变换、瓦片/地形工具、面板、新建地图、调整/偏移和图片导出参数会恢复到对应浏览器会话或地图标签。长操作共用单一 `Escape` 取消优先级:导出、Automapping Worker、World 合图、资源重定位、大范围填充、扩展批处理和目录扫描都不会提交半成品;保存进入不可安全中断的实际文件写入后会明确提示; - “偏好设置 → 版本与更新”显示应用版本、构建 ID、构建时间和同源静态资源状态。检查只执行不带 Cookie 的同源 GET,读取最多 32 KB 的 `version.json`,不发送工程、地图、图片、编辑记录或扩展数据;生产资源使用内容哈希,新构建通过构建 ID 刷新入口,避免旧页面与新格式代码混用; - 左右工作面板可独立折叠、隐藏、拖动边界调整宽度,并可切换成带拖动标题栏和尺寸手柄的浮动窗口;项目、素材、模板、图层、对象、属性、地形、动画、碰撞和控制台均可从专用页或“视图”菜单直接定位。布局保存在浏览器本地偏好中,“视图”菜单可恢复默认布局,`Tab` 可临时隐藏顶栏、面板、文档栏和状态栏后专注画布,再按一次恢复; - 地图、独立 TSJ/TSX 瓦片集和 JSON/XML 对象模板共用多文档标签;每个文档分别保存撤销历史、保存点、缩放、滚动位置、所选层和面板页。支持 `Ctrl+Tab` / `Ctrl+Shift+Tab` 切换、`Ctrl+W` 关闭、`Ctrl+Shift+T` 恢复最近关闭文档、关闭全部和只读模式,标签直接显示未保存、只读、磁盘变化、冲突与错误状态; - 左侧“工程”页可显式授权一个或多个本地素材根目录,递归识别地图、瓦片集、模板、World、图片、脚本和普通文件,提供自然排序、折叠、刷新、筛选及 `Ctrl+P` 文件名/路径模糊搜索;独立“模板”页汇总已打开模板和授权工程中的模板文件,可直接打开、切换、拖到地图,或点击“放置实例”自动返回最近使用的地图,以悬停预览和单击连续放置保留 `template` 文件引用的可编辑对象实例。任意对象可保存成 XML/JSON 模板;模板实例按 Tiled 的字段级覆盖规则同步未覆盖字段和属性,可重置或解除关联,模板编辑与磁盘重载会传播到全部已打开地图,缺失和循环引用进入可定位的错误中心,TMJ/TMX 导出还可选择仅在导出副本中批量解除模板。工程条目右键可新建文件/文件夹、重命名、同根移动和永久删除文件,移动或改名会校验复制结果并更新 JSON/XML 内部引用,失败时回滚。授权范围外的文件仍可临时打开,不会被强制写入工程; - “打开”在支持 File System Access API 的浏览器中取得用户选择的文件句柄,`Ctrl+S` 原位保存、`Ctrl+Shift+S` 另存并每 1.5 秒检查磁盘版本;干净文档自动重载,本地与磁盘同时修改时可并排比较、重载、忽略或另存副本。普通上传浏览器继续使用下载保存,最近文件只记录本地元数据并可从当前标签或已授权工程树重开; - 错误中心统一保存最多 500 条错误、警告和信息,支持按级别与文本筛选,并可携带文件、图层、对象、格坐标或属性路径定位信息;文件导入、保存、拖放、外部监听和缺失资源已接入。缺少 TSX/TSJ 或图片时地图仍以占位数据打开,可从已授权工程目录批量重定位;相对路径始终以实际拥有引用的地图、瓦片集或模板为基准,外部依赖文件批量写回失败时自动回滚; - 图片资源以规范路径、尺寸、修改时间、MIME 和 SHA-256 内容哈希建立共享缓存,同一物理素材不会因被地图、瓦片集和模板重复引用而重复解码; - 顶栏“新建”或 `Ctrl+N` 可创建正交、45° 等距、交错、六边形或斜投影地图,分别配置地图格数、瓦片尺寸、交错轴与奇偶索引、固定/无限模式、矩形分块尺寸、四种渲染顺序及数组、CSV、Base64 与 zlib/gzip/zstd 层数据格式;创建是单次可撤销事务,保留工程素材、瓦片集和类型; - 无限地图绘制会按配置自动创建稀疏矩形分块,擦除最后一个非空格时回收空块;选择、复制、图章、Terrain 和油漆桶共用负坐标安全的格模型。画布只遍历视口安全边界内的块,超大坐标通过最多 8192 像素的虚拟窗口定位和编辑;TMJ/TMX 保存前由浏览器 Worker 复制分块,大范围填充分批扫描/写入、实时显示进度并可取消回滚; - 右侧“地图尺寸 → 调整大小”按逻辑格数提供九宫格内容锚点;固定瓦片层会重排与裁剪,无限分块、对象、图片、行走格和遮挡格同步偏移,画布保留原有自定义像素余量,整个操作可一次撤销; - “裁剪到当前瓦片内容”按所选固定瓦片层的非空 GID 精确收紧边界并清理边界外对象;“扩展到全部内容”合并全部瓦片层、行走格和遮挡格边界,只扩大地图而不裁掉已有范围; - “文档 → 地图存储”可在固定地图与无限地图之间双向转换:固定层按矩形默认分块无损拆分;转回固定地图时按全部瓦片、行走格和遮挡格的联合边界归一,保留对象层、图片层及其偏移,并支持一次撤销/重做; - “偏移地图内容”完整支持全部可见层、全部层或所选层,作用于整张地图或当前瓦片选区,并可分别启用 X/Y 环绕;瓦片、对象、图片、行走格和遮挡格在一条撤销事务中同步处理,无限地图整图偏移会按新坐标重分块; - 顶栏定位按钮或 `Ctrl+Shift+G` 可按 `X, Y` 跳转并闪烁标出目标格;固定地图自动限制到边界,无限地图保留负坐标,正交、经典等距、交错等距、六边形和斜投影共用各自准确的格中心换算; - 画布状态栏实时显示鼠标地图像素坐标、格坐标、当前层、当前工具、缩放和工具模式;离开画布后坐标明确显示为空,并可一键复制最后一个格坐标; - 右侧“世界”页可同时新建、打开、保存和卸载多个 Tiled `.world`,管理地图相对文件名和全局像素矩形;支持普通文件选择,也可在 Chromium/Edge 中用“监听”取得用户授权的文件句柄,每 1.5 秒检测外部变化:本地未改动时自动重载,双向改动时暂停并要求显式选择,其他浏览器继续使用普通“打开”手工重载。既可加入当前地图,也可连同 TSX/TSJ 和图片素材批量加入任意 TMJ/TMX。启用 `onlyShowAdjacentMaps` 后只为当前/邻接上下文和正在查看的总览按需生成预览,切换上下文立即释放非邻接预览与未完成任务;地图源文档继续无损保存在工程中。已加载邻图会在主画布与 World 总览显示真实预览,点击即可在保持全局视口的情况下切换编辑文档;混合正交/等距等方向可并排显示,地图可拖动、键盘移动,当前地图还可用八个边/角手柄实时预览并调整逻辑尺寸;`Escape`/右键可取消移动或缩放,非当前文档可从浏览器会话卸载;整个 World 可按包含负坐标和真实画布范围的透明边界合成为单张 PNG,缺少地图或超过浏览器安全尺寸时给出明确诊断;类、递归属性、文件名正则模式均可编辑,地图缩放时内容反向补偿,World 位置与投影宽高在同一撤销事务中同步更新; - 右侧“扩展”页可导入普通 `.js` 和 ES Module `.mjs`,也可在 Chromium/Edge 中同时显式授权全局扩展目录和当前工程扩展目录,两边独立每 1.5 秒检查增删改;面板统一显示内置格式插件及脚本扩展的格式、版本、运行状态、错误和来源,脚本头部可用 `@name`/`@version` 声明元数据。文件和目录脚本会内嵌保存到原生工程,重新打开工程时一律恢复为禁用,必须再次明确确认才会运行。已运行的文件被重新导入或任一授权目录源码变化时,旧 Worker 会先终止,再以新源码建立全新上下文;新增目录脚本保持禁用。Worker 由无同源权限的 sandbox iframe 创建,CSP 默认禁止网络、图片、媒体、表单、外部框架与对象,脚本也接触不到编辑器 DOM 和同源存储;控制台保留最近 500 条分级日志及错误堆栈,停用/重载/移除会终止对应沙箱。脚本已经完整覆盖 Asset、TileMap、Tileset、Tile、MapObject、Layer、TileLayer、ObjectGroup、ImageLayer 和 GroupLayer 的 Tiled 1.12.2 声明:稳定的 `tiled.activeAsset` / `openAssets`、资产生命周期、直接字段赋值、地图/对象/图层选择、对象文本与瓦片状态、图层递归归属、地图/瓦片尺寸、固定层越界格、图块集增删替换、瓦片/瓦片集/图片层图片和碰撞对象层均回到主线程校验并进入正确的撤销或界面选择状态;既有瓦片图片在 Web 中使用 `await tile.image.ready` 惰性解码。`TileLayer.edit()` 可跨多次 apply 合并连续历史,`TileLayer.wangEdit()` 覆盖八个 WangIndex、共享边角、邻格修正、擦除、apply 和 generate。TileMap 的六组屏幕/像素/格坐标转换覆盖正交、经典等距、交错、六边形和斜投影;`merge` 会按当前层、所选层或同名层合并画笔地图、统一缺失瓦片集、支持擦除格和连续撤销合并;`Region` 会把并、减、交结果规范化为不重叠矩形并按八邻域拆分连通区,`SelectedArea` 及 `Qt.point/rect/size` 可读取、组合并修改网页编辑器瓦片选区。官方 `WangSet` 的类型、代表瓦片、颜色数量、Wang ID、颜色名称与有效类型均已接通,Web 额外提供可事务写入颜色、概率、代表瓦片、类和属性的 `WangColor` 视图。`tiled.project` 可读取和修改工程属性与类/枚举类型,`tiled.session` 通过宿主受控的浏览器本地存储同步提供会话值和每文件状态;扩展还可注册带文本、图标、勾选状态、启用状态和快捷键的 Action,动作会显示在扩展面板、响应全局快捷键并由隔离 Worker 执行。图标既可使用受限的内嵌 PNG/GIF/WebP data URL,也可引用用户已授权扩展目录中相对脚本位置的同类图片;断开目录会停用相关扩展并清除临时资源。`tiled.extendMenu` 已接入网页编辑器的文件、编辑、视图、地图、图层、对象、瓦片集、世界和工具九组菜单,支持官方 `before` 继承规则、分隔线、同一扩展多次追加及实时的可见/禁用/勾选状态;还提供带 `menu`/`title` 和 `items` 的嵌套子菜单作为巷图 Web 扩展。所有工程写操作回到主线程校验并进入统一撤销历史,行走、背景和遮挡标注基础层不可被扩展间接删除;World 兼容 API 还提供 `tiled.worlds`、`worldsChanged`、显式/模式地图查询、矩形查询、包含判断、地图增删/矩形修改及 World 加载/卸载; - 扩展页还提供纯 Web 的“一次性批处理”:参数按行输入并作为只读快照暴露给 `tiled.scriptArguments`,脚本在独立 Worker 中执行完成或失败后立即销毁,未等待的受控写入会在宣告完成前排空;运行中的常驻扩展与同一脚本批处理互斥,死循环可由“停止批处理”直接终止。该模式对应 Tiled `--evaluate