编辑
2026-10-16
编程学习
00

本文是由 DeepSeek 生成的 DDNet 地图编辑器模块分析。仅作为方便看的存档使用。

注意

注意,本文几乎 100% 包含 AI 生成内容!

相关信息

  • 适用版本:master @ a0dfc77b8
  • 本文行号对应这个版本;所有路径相对仓库根目录。
  • 目标:让接手的人半天内建立完整心智模型,知道"改哪里、别踩什么坑"。

0. 30 秒速览(TL;DR)

  • 地图编辑器是客户端专属模块(src/game/editor/,约 2.6 万行),通过 IEditor 接口注册进 engine;用配置变量 cl_editor(快捷键 Ctrl+Shift+E)在游戏内切换。它不单独起进程,也没有独立渲染器——渲染复用游戏客户端的 CRenderMap。
  • 结构是四层文档模型: CEditor(应用外壳 / 多标签页) → CEditorMap(一个打开的 .map 文档) → CLayerGroup(图层组,含视差/裁剪) → CLayer 子类(tiles / quads / sounds / game / tele / speedup / switch / tune / front)。
  • 桌面对象全部是 std::shared_ptr,由 CEditorMap 的 vector 拥有;元素之间的引用一律是整数索引,因此每次增删都要显式 remap。
  • 所有可撤销操作都是 IEditorAction 对象,压进 CEditorHistory 栈;连续拖拽通过 *PropTracker 的 Begin/End 模式聚合成一条 action。
  • 地图文件读写集中在 mapitems/map_io.cpp,保存是异步的(CDataFileWriterFinishJob 交给 engine job 队列)。
  • UI 是立即模式,基于游戏客户端的 CUi(void *pId 地址即身份 + hot/active 模式);工具栏/快捷键由 X-macro 表 quick_actions.h 声明(但工具栏不会自动遍历它,见 §7.5)。

规模速查:editor.cpp 5205 行、popups.cpp 2855 行、editor_server_settings.cpp 2203 行、envelope_editor.cpp 2376 行、editor_actions.cpp 2119 行、map_io.cpp 1289 行、layer_tiles.cpp 1408 行;组件 10 个、具体 action 类 41 个、quick action 55 个、popup 渲染函数 30+ 个。


编辑
2026-09-22
项目学习
00

没想到时隔一年多我还会打开继续编辑这篇文章,这部分就记录一下栖梦端的配置过程吧。

gui_logo.png

栖梦端(QmClient)是面向中文玩家的社区客户端,在 DDNet 核心玩法之上,提供更现代的界面、清晰的信息反馈与实用的日常功能。

编辑
2026-04-01
博客搭建
00

使用 Vanblog 也有好长一段时间了,还挺喜欢这个博客的。但是目前作者的更新不活跃,使用过程中又会遇到一些问题,只能摸索一些解决文案,并记录在这里以备不时之需。

编辑
2026-01-12
课程学习
00

BlocksExchange XML 格式是 Bentley 提供的一种开放交换格式,用于在 ContextCapture Master 中导入/导出区块定义。基本上所有三维重建软件的空三都支持该格式。

编辑
2025-12-29
折腾工具
00

这篇文章主要是记录 AI 工具配置中的一些小经验。