导航与 HUD
画好路以后,导航就是地图软件那一套:选目的地、选交通方式、选路线偏好, 先看见路线再出发,然后跟着 HUD 走。区别在于它的数据是你自己画的, 所以它给的每一条路线都能在地图上指出它为什么这么走。
四种开始导航的方式
| 方式 | 怎么用 | 要不要编辑模式 |
|---|---|---|
| 地图上直接选点 | 在世界地图上 Ctrl + 左键点一个位置,立刻以那里为目的地开始规划。 | 不用。Ctrl + 左键是唯一一个不需要 R 的地图操作。 |
| 主界面 K | 在世界里按 K 打开主界面,点「选择目的地」;「结束导航」「切换出行方式」也在这里。 标题下那张地图只能看——拖动平移、滚轮缩放,点它不会选点也不会开始导航。 | 不用。按键可以在「控制」里改;世界地图里按 K 不会触发(地图有自己的按键)。 |
| 导航仪 | 手持「道路导航仪」右键,打开「选择目的地」界面;鼠标悬停时 tooltip 显示当前行程。 | 不用 |
| MCPhone | 装了 MCPhone 时,手机里会多出一个「问道导航」应用,作用等于一个打开选择界面的入口。 | 不用 |
导航仪由四角铁锭、四边纸、中心指南针合成(有序,九格全满),拿到指南针后配方会自动出现在配方书里。 0.2.2 新增的 K 主界面是另一个入口:不必把导航仪拿在手上,按一下就能看状态、 换出行方式、选目的地或结束导航,两条路最后都落在「选择目的地」上。
交通方式:等级决定路线
交通方式不是换一个速度数字,而是换一套能走的等级。同一组起终点, 换个方式就会得到另一条路线,因为它们能走的路根本不是同一批:
| 交通方式 | 能走的等级 | 速度(格 / 秒) |
|---|---|---|
| 步行 | 高速、公路、小路、冰道 | 高速 / 公路 5.612 · 冰道 4.317 · 小路 4.0 |
| 驾车 | 高速、公路 | 9.0(两个等级同速) |
| 公共交通 | 铁路、水路、冰道 | 冰道 40.0 · 铁路 / 水路 8.0 |
速度是「交通方式 + 道路等级」这一对的性质,不属于其中任何一半:同一条冰道, 船在上面是地图上最快的线路(40 格/秒),人走在上面只是普通的路。 预计到达时间就是按这张表逐段算出来的,它不读取你此刻骑的马或船的实际速度。
公共交通还多一项等车时间:每一次登乘都计一次,第一次上车和每次换乘都算,
默认 60 秒(配置项 transit_wait_seconds)。线路没有时刻表可读,
所以这是一个「平均等待」而不是某班车的时间。它既进搜索也进估算——
为了省四十秒步行而多等两分钟的行程,不是任何人会选的行程。
路线偏好
| 偏好 | 含义 |
|---|---|
| 最快时间 / 最短距离 | 前者按每种路的实际速度给每条路计代价;后者忽略速度,只跟最短的一串路走。 两种度量都会应用下面「优先大路」的权重。 |
| 避开类型 | 把指定等级从路线里排除掉,例如不想走水路(配置项 avoid_road_classes)。 |
| 优先大路 | 按等级给代价乘一个权重(配置项 prefer_major_roads):
高速 1.0 / 公路 1.25 / 小路 1.8。1.25 的意思是「为了走高速,绕 25% 以内都值得」——
不禁止任何等级,只是让次一等的路不那么划算,所以真的短得多的近路仍然会赢。 |
这三项都能在「选择目的地」界面里直接点,改完会写进 route_preferences.json,
下次打开还在;也可以在 客户端配置 里改默认值。
权重只乘在搜索的代价上,绝不碰速度:面板报的「约 X」始终来自路线自己记录的 真实速度。选路用什么数字、报时就用真实速度——曾经的做法是把惩罚折进速度, 两者当时能对上纯属巧合,谁顺手改动一行就会无声地坏掉。现在时间在结构上不可能再被偏好污染。 两种度量走的是同一条计算,所以「最快」与「最短」下这个开关都生效。
它以前对开车完全无效:那只是压在「小路」上的一个 1.6 倍惩罚, 而车根本不许上小路(驾车只允许高速与公路),被罚的那一类恰好是开车永远用不到的那一类; 剩下高速与公路同速同代价,勾了等于没勾。现在按等级给权重,开车才是这个开关真正有意义的场合。
高速上的搜索限制
高速上不许原路折返:回到刚走过的那一段,或者走上它与同两个节点之间的另一段 (一条路被画成一来一往两段时就是这样),在搜索里直接不成立。其余转弯卡在 100 度以内——这个上限留住了高速真正会有的每个弯:直角路口是 90 度、 分隔式高速在中央分隔带端头的掉头匝道、以及向外弯出去的匝道,同时挡掉它不会有的发夹弯、 折返与掉头。
限制落在搜索里,而不是念白里:以前只是把「掉头」的提示改说成「继续前行到下一个路口」, 路线本身照样能规划出一个发夹弯,于是一个人可能被告知「上了高速再原路折回来」。 这条规矩对不是高速的路完全不影响:司机拐进小巷、行人沿小路折回来都是常事。
先预览,再出发
在选择界面里点地图、点列表或搜索,选中的目的地会立刻把整条路线画在地图上, 并给出「预览 · 目的地」与「目的地 · 约 时间」;这时还没有开始导航,你可以换方式、换偏好, 看着路线改主意。确认无误,再按「导航到这里」。
如果选中的方式在当前路网里根本没有可走的连接,界面会直接写「没有可用的道路连接」, 而不是画一条看起来能走的线。
更慢、无解与接驳距离
规划失败或规划结果不合理时,问道的态度是说清楚,而不是给你一条荒唐的路线:
- 比走路更慢,或该方式无解:会说明原因并改为按步行规划,
读数上会写着「… 比步行更慢(… vs …),已按步行规划」或「… 在此没有可用路线,已按步行规划」
(配置项
fall_back_to_walking_when_slower,默认开)。 - 驾车退回步行时,按「车走的时间 + 人走的时间」重新计时(0.2.1 起): 步行是唯一能离开路网的交通方式,所以无解时那条按步行规划出来的线是唯一能给出来的答案; 但它每一段都按步行速度计时,连汽车明明开得动的公路也一样,于是「目的地离可开的道路一百多格、 最后要走一段」的行程,预览里显示的时长会比真正会花的长得多。现在这条线本身不动 (照旧是步行规划出来的那一条,最后那一段走走也照旧),只是按驾车重新配速: 车能走的每一段按汽车在该等级道路上的速度算,走不了的那一段保持步行速度。 公共交通不给这条:一趟行程不是「能坐就坐、不能坐就走」,一条线路拉不动这趟行程时, 如实给步行,时间也照旧是步行的。
- 公共交通是例外:一条真实存在的公交行程不会被替换掉。 步行只会作为替代方案给出,不会顶替那条行程—— 否则你选了公共交通,却拿到一条全程步行的路线,跟没做这个功能一样。
- 步行越野有上限了(0.2.2 起):
walk_offroad_blocks默认 32 格,范围0 ~ 4096。超出的目的地或路尽头直接判「没有路线」, 不再画一条横穿地图的直线。走路网之外的地方本来就是步行会做的事, 所以这个值给的是「越野多远还算合理」,而不是有没有这个能力。 - 驾车不再越野(0.2.2 起):只允许「车还在路面上」的那一点距离 (最宽路面的半宽)——停在路边可以,停在田里不行。以前它和公共交通一样可以走 64 格直线接驳。
- 公共交通的乘车段也不再越野(0.2.2 起):只保留站台到轨道的接驳
(
station_snap_blocks,默认 32 格),超过就没有这段车程; 一段「全是接驳、没有一节在轨道上」的假乘车会被拒绝。步行段仍按walk_offroad_blocks越野。 - 单行道只能顺着走:被标成单行的路,规划只在允许的方向上使用它,步行也一样 (见 画路、命名与地点)。所以把一条街设成单行之后, 反向的路线会改走别的路——真的没有别的路时,答案就是「没有路线」, 而不是默默按反方向走完。
HUD、读数与转弯判定
导航开始后,屏幕上的面板给出:旋转小地图(带北向指示)、转向箭头、 剩余距离与时间、进度条。文字读数是同一套数字的另一种写法, 例如「前往 家 | 剩余 840 米 · 约 1分40秒」。到达时显示「✔ 已到达 家」。
导航线分成「已走」与「未走」两种颜色;走完最后一段时整条按「已走」处理, 不会因为到达而整条重画回未走的颜色(0.2.2 起)。退出世界也会结束导航: 世界被卸下时就结束并写一行日志,上一局的路线不会跟着带进下一局。
转弯判定要求朝向。与路口齐平时,只有当你大致转向该方向(≤45°)才算「转过」; 直着穿过一个十字路口、或者只是在路口掉了个头,都不会被误判成转弯。 需要掉头时会提示掉头,但如果正在高速上,提示会改成「继续前行到下一个路口」—— 在高速上叫人掉头是句废话。
偏航才重算。只有当你离开当前所在等级道路的容差之后才会重新规划,
容差按等级配置(on_road_tolerance_blocks)。它量的从来不是路的宽度,
而是「画笔那条中线多远还算在路上」——那条线是画在路中间的一条折线,
所以分隔式高速的对向车道、路边的行人、飘离运河中线的船,明明都在走自己那条路,
不该被判成偏航然后一路重新规划。重算时面板显示「⚠ 已偏离路线,正在重新规划」。
想停下来随时可以:选择目的地界面里有「停止导航」。
| 道路等级 | 默认容差(格) |
|---|---|
| 高速 | 24 |
| 公路 | 16 |
| 小路 | 8 |
| 铁路 | 16 |
| 水路 | 32 |
| 冰道 | 12 |
水路最大是故意的:船本来就不拴在一条线上,运河比任何街道都宽;小路最小也是故意的, 小路本来就窄。每一级仍然可以在配置里改。
已经写过 howtogo-client.toml 的实例不会被新默认值改写:
NeoForge 只在文件不存在时写入默认值。想用新值,自己改
[on_road_tolerance_blocks] 那一节,或者删掉它让游戏重写。
行程停靠的站点周围 32 格算「就在站上」(station_snap_blocks,1~256)。
站台、站前广场、天桥离轨道中线几十格是常事,过去一走出路线容差就被判偏航;
在这个半径内,行程就不再把你当成离开了路线。换乘站是几条线路的多个站点凑成的一个地点,
每个站点周围各自生效,所以从一个站台走到另一个站台换乘也不会被判成偏离。
语音播报
配置项 voice_announcements(默认关),或者「选择目的地」界面里的语音开关。
打开后会播报这几件事:开始导航(「问道地图为您导航」)、转弯前、现在转弯、到达
(「已到达目的地附近,本次导航结束」)、偏离路线。
它用的是 Minecraft 原版 TTS,因此音色由操作系统决定,详见
常见问题 与
更新日志。
提示距离随路况缩放,避免「在 300 米后转弯」用在一条小路上,或「在 50 米后转弯」用在高速上:
| 脚下的路况 | 提前多远播报 |
|---|---|
| 步行(任何可行走路面) | 50 米 |
| 驾车 · 公路;公共交通 · 水路 | 100 米 |
| 驾车 · 高速;公共交通 · 铁路 | 300 米 |
| 公共交通 · 冰道 | 500 米 |
「提前多远」与「现在算到了」两个距离是固定配对写好的,而且后者永远小于前者: 语音不可能比文字更早喊出「现在转弯」。面板、地图读数与语音读的是同一个数。