# 确认时间
# Minecraft 的时间系统设计
在真实世界中, 我们将时间划分成了"世纪、年、季、月、星期、天、小时、秒". 这些时间划分并不是天然存在的, 而是人类基于日月星辰和昼夜轮回的变化, 根据古代农业生产的需要, 人为定义的.
作为 Minecraft 游戏的设计者, 他们又是如何根据游戏的需要来设计时间系统呢?
- 从"游戏定位"的角度来看: Minecraft 作为沙盘游戏, 时间系统需要很灵活, 所以游戏设计者选择了"天"作为主要的时间单位, 而没有考虑星期几、第几月、哪个季节、第几年...
- 从"游戏体验"的角度来看: 游戏设计者希望玩家能够脱离痛苦的现实世界、沉浸到幻想的游戏世界中, 所以他们并不考虑和现实世界的时间系统同步, 而是让游戏世界的时间加速流逝, 从而让玩家在一局游戏时间中, 度过多个昼夜轮回, 获得更频繁的愉悦体验. 最终, 他们选择将游戏的一天设定为现实世界的 20 分钟. 也就是说, 玩 20 分钟就能体验游戏世界中的一天
- 从"游戏开发"的角度来看: 所有电子游戏都是由一个大的循环程序在驱动. Minecraft 的游戏设计者将循环程序的一个周期设定为 0.05 秒 (也就是说, Minecraft 内部的循环程序以每秒 20 个周期的速度在运行, 游戏在这个周期内更新太阳的位置、更新植物的生长). 开发者将这 0.05 秒的单位时间定义为 1 个"游戏刻(Game Tick)"[1]
最终, Minecraft 的时间系统设定是:
- 游戏中的 "1 天" = 现实世界的 20 分钟[2]
- 游戏中的"白天" = 现实世界的 10 分钟
- 游戏中的"黑夜" = 现实世界的 10 分钟
- 游戏中的 "1 游戏刻" = 现实世界的 0.05 秒
- 游戏中的 1 天 = 24000 "游戏刻"
- 游戏中的 1 小时 = 1000 "游戏刻"
- 1 "游戏刻" = 游戏中的 0.001 小时
# Minecraft 时间系统的对应关系
游戏世界的时间 | 游戏刻 | 备注 |
---|---|---|
6:00 am | 0 (也可以认为是24000) | 黎明, 一天开始 |
7:00 am | 1000 | 白天开始 同时也是 /time set day 命令所设置的时间[3] |
8:00 am | 2000 | |
9:00 am | 3000 | |
10:00 am | 4000 | 光照强度达到最大值 15, 并且一直持续到下午 2 点 |
11:00 am | 5000 | |
12:00 pm | 6000 | 正午, 太阳在头顶正上方, 和地平线成 90° |
1:00 pm | 7000 | |
2:00 pm | 8000 | |
3:00 pm | 9000 | |
4:00 pm | 10000 | |
5:00 pm | 11000 | |
6:00 pm | 12000 | 黄昏, 日落开始 |
7:00 pm | 13000 | 夜晚开始, 可以上床睡觉[4] 是 /time set night 命令所设置的时间[3:1] |
8:00 pm | 14000 | |
9:00 pm | 15000 | |
10:00 pm | 16000 | |
11:00 pm | 17000 | |
12:00 am | 18000 | 午夜, 月亮在头顶正上方, 和地平线成 90° |
1:00 am | 19000 | |
2:00 am | 20000 | |
3:00 am | 21000 | |
4:00 am | 22000 | |
5:00 am | 23000 | 日出, 月落 |
am 是拉丁语 ante meridiem 的缩写, 表示正午之前, 即每天的 0:00 ~ 11:59 时段 pm 是拉丁语 post meridiem 的缩写, 表示正午之后, 即每天的 12:00 ~ 23:59 时段
# 如何查看时间?
有 2 种方法来查看时间:
- 通过命令行查看精确的"游戏刻"
- 使用"时钟"查看大致的时间
# 1. 通过"命令行"查看精确的时间
我们可以通过命令行查看从黎明(即游戏世界的 0:00, 游戏刻为 0)到当前所流逝的"游戏刻"的总数.
假设, 我们输入命令行 time query daytime
, 获得游戏的返回值是 4650
. 这个 4650 是"游戏刻". 根据上文可知, 4000 游戏刻表示 10:00 am, 5000 游戏刻表示 11:00 am. 所以 4650 是上午 10 点多, 但不超过 11 点.
如果我们想精确计算. 根据上文得知:
- 上午 6:00 的游戏刻是 0
- 游戏中的 1 游戏刻 = 游戏中的 0.001 小时
因此, 4650 游戏刻等于 4650 x 0.001 + 6 = 10.45, 0.45 x 60 = 27分, 所以, 即 4650 表示上午 10 点 27 分.
# 2. 使用"时钟"查看大致时间
"时钟"只能显示太阳和月亮与地平线的相对位置. 因此, "时钟"无法查看精确的时间, 但是能够看出大致的时间范围和几个明确的时间节点, 比如黎明、正午、黄昏、午夜:
"时钟(Clock)"的合成方法:
物品 | 材料 | 合成配方 |
---|---|---|
时钟 Clock | 金锭 + 红石粉 Gold Ingots + Redstone |
# 如何修改时间?
我们可以通过命令行修改时间:
作用 | 命令行 | 例子 |
---|---|---|
设置时间 | time set <游戏刻> | time set day 或者 time set 1000 , 表示将时间改成白天 |
增加时间 | time add <游戏刻> | time add 1200 表示在当前时间的基础上, 增加 1200 游戏刻 |
Minecraft 文章中所说的"刻", 大部分是指"游戏刻", 但是在描述"红石系统"时, 也有可能是指"红石刻"[1:1], 所以需要根据文章前后文的背景来确定"刻"的含义. 关于"红石刻(Redstone Tick)"的讲解, 可以参考 《土豆创世系列: Minecraft 红石电路工程师》 (opens new window)
除了"游戏刻", Minecraft 的开发人员将"红石系统"每次循环检测的时间设定为 0.1 秒. 同样的, 为了方便游戏开发, 将这个 0.1 秒定义为 "1 个红石刻" ↩︎ ↩︎
换个角度来看, 真实世界中的一天是 1440 分钟, 游戏中的一天是 20 分钟, 也就是说游戏中的时间流逝速度是真实世界的 1440/20 = 72 倍 ↩︎
准确来说, 能够上床睡觉的准确时间是 12541 ~ 23458 游戏刻. 此外, 只有同时满足两个条件, 才能在上床睡觉: 1. 时间必须在 7:00 pm 之后; 2. 周围没有怪物(以床为中心, 水平方向 8 格范围内, 垂直方向 5 格范围内). 如果我们尝试在其他时间睡觉, 游戏会提示我们"你只能在晚上睡觉". 如果我们尝试在有怪物的环境下睡觉, 游戏会提示我们"你现在不能休息, 周围有怪物在游荡" ↩︎