地图显示与缩放
地图上画什么,由两件事决定:你自己按掉的开关,以及地图当前的缩放级别。 前者是品味(不想看到小路,或者上个月标的商店已经没用了),后者是算术 (一个屏幕装下一整片区域时,每条小路每个摊位都画出来只会糊成一片)。 这两套规则在本模组里走的是同一个入口,所以它们不可能互相矛盾。
左上角的「地图显示」面板
打开 Xaero 的世界地图,左上角会有一块写着「地图显示」的小面板。它是一层屏幕覆盖层, 而不是地图的一部分——这一点是有意的:地图画出来的线路、标记和名字都盖不住它, 点它也不会被地图截走。默认位置在左上角往里一点(屏幕坐标 40, 4)。
| 操作 | 结果 |
|---|---|
| 拖动标题行 | 整块面板跟着走;松手时位置被记住,下次打开地图还在那里。 |
| 点标题行右侧的方块 | 卷起 / 展开面板。卷起后只剩标题行,开关都不在,也就不会被误点。 |
| 点任意一个开关 | 立刻生效,并直接写进文件,不需要「保存」。 |
面板的位置被限制在屏幕内,所以拖不出屏幕、也不会因为换了窗口大小而彻底找不回来。 如果这块地方正好被别的模组(例如机械动力自己的界面)占着,拖走即可——谁挡着谁,取决于你装了哪些模组、窗口多大, 所以这里给的是一个默认角加一个拖拽,而不是替你猜一个位置。
编辑模式下不显示这个面板:那时屏幕的左下与右下属于编辑器自己的读数与快捷键表, 面板让位。想调显示,先按 R 退出编辑模式。
有哪些开关
| 分组 | 开关 |
|---|---|
| 道路等级 | 高速 · 公路 · 小路 · 铁路 · 水路 · 冰道(每个等级一个,颜色与它画出来的线一致,可以自己定,见下文) |
| 公共交通线路 | 一个总开关,管所有线路(包括机械动力与 MTR 的线路) |
| 地点类型 | 商店 · 站点 · 地点 · 资源点(每类一个) |
这是你自己的偏好,与存档无关:换一个存档、换一台服务器,显示偏好还是这一套。
它存在 config/howtogo/map_filter.json 里,和路网文件不在一起——
删掉这个文件只是让地图恢复「什么都画」,不会碰到你的路。
顺带:MTR Map Overlay 的两个开关也会被记住
如果你还装了 MTR Map Overlay,它自己地图上的那两个「线路 / 轨道」开关(不是这块面板上的)
以前每次开游戏都会回到「都画」。现在问道把它们记在
config/howtogo/mtr_overlay_toggles.json 里:改了立刻保存,下一局进来还是上次那个样子。
它自己的配置文件不动;删掉这个文件就不再记。没装那个模组时,这一段功能不存在。
缩小时会自动取舍
缩得越远,越晚需要的东西越先消失。这个顺序是算出来的,不是猜的: 一张缩小的地图是用来看「哪儿有快路、什么值得专程去」的,而不是看细节的。 表格里的阈值单位是像素 / 块:低于这个缩放级别,这一项就不画了;阈值越小,越晚消失。
道路
| 顺序 | 等级 | 低于此缩放即隐藏 |
|---|---|---|
| 最先消失 | 小路 | 0.35 |
| 其次 | 公路 | 0.22 |
| 再次 | 水路 | 0.16 |
| 最后消失 | 铁路 | 0.12 |
| 永不因缩放消失 | 高速、冰道 | —(缩小看地图,看的就是「哪儿有快路」) |
地点
| 顺序 | 类型 | 低于此缩放即隐藏 |
|---|---|---|
| 最先消失 | 商店 | 0.5 |
| 其次 | 站点 | 0.3 |
| 再次 | 普通地点 | 0.2 |
| 最后消失 | 资源点 | 0.12(它本来就是值得从远处专程去的东西) |
换句话说是两个方向都能读的表:越缩小越先消失的是 小路 → 公路 → 水路 → 铁路,以及商店 → 站点 → 地点 → 资源点。
一个入口,两套规则
「你按掉的」和「缩放舍掉的」不是两个各自为政的过滤器,而是同一个问题的一次回答: 这个等级/这类地点,现在要画吗? 问的是同一个地方,所以不可能出现「面板上开着、缩放却把它藏了」这种自相矛盾的状态, 也不需要你去分辨「到底是开关的问题还是缩放的问题」——两者都在同一个判断里。
公共交通线路从不因为缩小而消失。 它是本模组自己的主题,也是地图上唯一不能由道路推出来的东西—— 把线路舍掉,缩小的地图就只剩下一堆路,而它想问的「怎么坐车过去」就没法回答了。 想让线路消失,用面板上那个总开关。
画的先后:层与描边
地图是俯视图,一定要有东西压在另一样上面,所以「谁先画」是一条明确的规则: 路段按层从低往高画——高架(层 1)压在地面(层 0)之上,隧道(层 -1)在最下面, 低层永远不会盖住高层。同一层里先画完所有描边、再画所有填充, 所以十字路口看起来是一条路从另一条上跨过去,而不是两团颜色糊在一起; 单向箭头跟着本层的填充画(所以桥也盖得住桥下的箭头),之后才是路口点、地点标记,最后是所有文字。
以前画的顺序是路网内部的枚举顺序(一个按路段 id 哈希的顺序,与高度毫无关系), 于是一座桥是被画在它所跨的路上面还是下面,取决于两条路段谁先被枚举到。现在这条规则是确定的, 同一层里的先后不变,所以这一改只动了那些本来就画反的路。
网页地图(/howtogo webmap)是同一套规则:同样从低层往高层画、
同层先描边后填充、文字最后,所以屏幕上看到的遮挡关系,与导出的 PNG 一致。
名字的大小与位置
名字这一块在 0.2.2 里重做了一遍,而且是世界地图与网页地图共用同一套规则: 同一张「已占位置」表、同一套字号与避让判断。所以屏幕上怎么排,网页地图里就怎么排, 导出的 PNG 也一样。
出发点只有一句:名字是标签,不是测量结果。它要落在自己标注的那条路上、那个点旁边, 而不是浮在半空抢走地图本身的分量。下面这些规则都是这一句的推论。
| 规则 | 行为 |
|---|---|
| 字号不超过路宽 | 线上的名字不超过这条路画出来的宽度:宽路字大、窄路字小,名字永远落在路面里。 路太细时(缩小的远景、小路、铁路)先不写名字,放大到够宽才出现。 |
| 长路会有好几个名字 | 一段路很长时,沿路每隔约 190 像素写一个,每段最多 8 个。
只写在屏幕上的可见段里;可见段比名字本身还短时,这一段就不写。 |
| 名字之间不重叠 | 地点名、铁路名、道路名排在同一张「已占位置」表上,按这个顺序找位置,排不下就不画。 两个地点靠近时只显示一个,放大到两个名字框分开,才都显示。 |
| 地点名按类型分级 | 地点名的字号按类型分:资源点 0.4、普通地点 0.55、
站点 0.7、商店 1.0,单位是像素 / 格。 |
| 地点名避开道路 | 默认写在标记下方;被占了就依次试上方、右方、左方、四个斜角,都不行才退一步。 |
| 名字与标记同源 | 地点名与地点标记来自同一份目的地列表——自己标记的地点、机械动力车站、MTR 车站, 所以 MTR 的站名也会画出来。 |
颜色可以自己定
道路等级的颜色以前是写死的,现在可以自己定:config/howtogo-client.toml 里新增了
road_colors 一节,六个道路等级各一个颜色,写法是 #RRGGBB,
或者带透明度的 #AARRGGBB。
这一份设置是唯一的一份:世界地图、导航小地图、目的地选择界面、图例、网页地图 读的都是它,改一处,几处一起变——所以不会出现「地图上是这个颜色、图例里是另一个」。
写错的值(不是颜色、位数不对)会被忽略并保留原来的颜色,日志里说一次; 改完不用重启,下一次绘制就用新的。
公共交通线路另有一节 transit_line_colors:铁路、水路、公路、冰道四个类型各一项,
改的是线路本身的那条线和它名下的每一个站点标记;
它下面的轨道仍按 road_colors 画——线是线,轨道是轨道。
默认值就是模组一直用的那套配色,不配置它,看起来和以前一样;从 MTR 读进来的线路
同样按类型取这一份颜色。
这两节都在 config/howtogo-client.toml 里,完整清单见
配置与数据文件。
地图上的标记
| 标记 | 样子 | 说明 |
|---|---|---|
| 地点 | 黄色方块 | 自己放的 POI、机械动力车站、MTR 车站都是这个标记;它也是编辑模式里放地点时看到的那一个。 |
| 线路站点 | 小方块,填的是线路自己的颜色,带一圈深色描边 | 颜色取自线路的类型(铁路/水路/冰道/公路),所以同一条线的站点一眼能认出来;
每个类型的颜色可以在 transit_line_colors 里改,见上面「颜色可以自己定」。 |
| 换乘站 | 橙色方块 | 尺寸与普通站点相同;只有两个标记在屏幕上真的重叠时才融合成一个,拉近看就分开。 |
标记的尺寸也随缩放变化,但有最小与最大尺寸:拉远到极限也不会缩成一个看不见的点, 放大时也不会糊满屏幕。站点标记跟着它所在的那个地点走——某类地点被开关关掉、或被缩放舍掉时, 站在那里的站点标记也一起消失,免得留下一个指着空处的点。
换乘站与线路颜色的更多细节见 公共交通线路; MTR 的线路与只读轨道见 MTR 集成。
地图上看不到东西时,先查这三处
- 面板是不是卷起了?卷起来的面板只剩标题行,开关的状态看不出来,点一下标题右侧的方块展开。
- 是不是被开关按掉了?你要找的那个等级/地点类型/线路,在面板上是不是暗着。
- 是不是缩得太小了?对照上面两张表:小路、商店这类东西在缩小时本来就是不画的,放大一点就回来了。
三处都正常还是空的,那就不是显示的问题,而是数据的问题:检查你是不是换了存档或服务器 (路网按世界名 / 服务器地址分开存,改了名字就会去新目录找,旧目录还在但不读了), 或者那个只读图层的前置模组没有装(阡陌交通的读法见 阡陌交通)。数据的组织方式见 配置与数据文件,改名后怎么找回见 迁移地图数据,常见问题见 常见问题与限制。