# 确认时间

昼夜循环

# 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. 通过命令行查看精确的"游戏刻"
  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, 即 上午 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)


  1. 除了"游戏刻", Minecraft 的开发人员将"红石系统"每次循环检测的时间设定为 0.1 秒. 同样的, 为了方便游戏开发, 将这个 0.1 秒定义为 "1 个红石刻" ↩︎ ↩︎

  2. 换个角度来看, 真实世界中的一天是 1440 分钟, 游戏中的一天是 20 分钟, 也就是说游戏中的时间流逝速度是真实世界的 1440/20 = 72 倍 ↩︎

  3. 关于 time set 指令的使用教程, 请参考 这里 ↩︎ ↩︎

  4. 准确来说, 能够上床睡觉的准确时间是 12541 ~ 23458 游戏刻. 此外, 只有同时满足两个条件, 才能在上床睡觉: 1. 时间必须在 7:00 pm 之后; 2. 周围没有怪物(以床为中心, 水平方向 8 格范围内, 垂直方向 5 格范围内). 如果我们尝试在其他时间睡觉, 游戏会提示我们"你只能在晚上睡觉". 如果我们尝试在有怪物的环境下睡觉, 游戏会提示我们"你现在不能休息, 周围有怪物在游荡" ↩︎