地图显示与缩放

地图上画什么,由两件事决定:你自己按掉的开关,以及地图当前的缩放级别。 前者是品味(不想看到小路,或者上个月标的商店已经没用了),后者是算术 (一个屏幕装下一整片区域时,每条小路每个摊位都画出来只会糊成一片)。 这两套规则在本模组里走的是同一个入口,所以它们不可能互相矛盾。

左上角的「地图显示」面板

打开 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 集成。

地图上看不到东西时,先查这三处

  1. 面板是不是卷起了?卷起来的面板只剩标题行,开关的状态看不出来,点一下标题右侧的方块展开。
  2. 是不是被开关按掉了?你要找的那个等级/地点类型/线路,在面板上是不是暗着。
  3. 是不是缩得太小了?对照上面两张表:小路、商店这类东西在缩小时本来就是不画的,放大一点就回来了。

三处都正常还是空的,那就不是显示的问题,而是数据的问题:检查你是不是换了存档或服务器 (路网按世界名 / 服务器地址分开存,改了名字就会去新目录找,旧目录还在但不读了), 或者那个只读图层的前置模组没有装(阡陌交通的读法见 阡陌交通)。数据的组织方式见 配置与数据文件,改名后怎么找回见 迁移地图数据,常见问题见 常见问题与限制。