注意
施工中
写这篇博文的原因,算是同学推荐吧。以前几次想啃这部书都未能行动起来。如今 AI 编程时代下,依然会遇到项目管理的问题,还是回顾一下这部经典之作中的哲学吧。
注意
施工中
前些时间有利用云服务器搭建内网穿透服务,辅助本地开发测试,面试中也被问到内网穿透的原理。但只知怎么用,不知为什么,十分尴尬。因此本文试图将自己的学习和理解记录下来。
本文是由 DeepSeek 生成的 DDNet 地图编辑器模块分析。仅作为方便看的存档使用。
注意
注意,本文几乎 100% 包含 AI 生成内容!
相关信息
master @ a0dfc77b8src/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 队列)。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+ 个。