时间

游戏里有两种可量度的时间: 现实时间及游戏刻。(所谓的微观延迟不可量度,而且其实就是顺序而已)

现实时间

现实时间就不用多说了,就是时、分、秒,相信大家都十分熟悉了。
然而在游戏里使用时分秒的东西真的不多,主要是因为游戏内的时间未必与现实世界同步(由于卡顿的缘故),因为游戏内的时间单位为游戏刻

额外知识:获取现实过去的时间

worldborder里的时间参数是真·时间参数,以现实时间计算的。
因此我们可以通过设置长时间、大长度改变,然后以statsworldborder get获取边界的直径,以计算过去了的时间。

游戏刻

游戏刻(game tick, 简写: gt)是游戏的基础时间单位。游戏会在1刻里做很多事情,如执行命令、进行一部分红石元件的更新等。一部分事情是马上进行的,如结构方块(Structure block)复制方块,或是删除实体等。
然而也有部分操作需要等待下一游戏刻才可见效,如骑乘实体的位置改变。因为游戏把那些操作放进了一个列表,我们通常称作NTE(Next Tick Entry),等待游戏刻开始/结束时的某个时段执行。所以我们对一些和实体、方块相关的更新需要特别留意,因为它们可能是需要1gt才能见效的,在同一gt进行重复性的操作是无意义的。

一般情况下是每秒20个游戏刻(最多20,可以更少),所以一般来说1游戏刻就是0.05秒(最短0.05秒)。
然而,如果电脑无法保持这个速度,每游戏刻的时间就可能延长。由于很多东西都是使用游戏刻来计算时间,所以如果游戏刻减慢,很多东西需要的时间会延长,而这也是大型命令系统中常见的卡顿。
假如1个游戏刻达到了1分钟的长度(当服务器配置不足以运行那么多命令/那命令需要的计算太多的时候可能出现), 服务器一般会崩溃。因此请注意别玩得太过。

顺序

即使是同一游戏刻执行命令,也不可能是真正的同时的。故此执行的先后次序十分重要。命令的先后次序对效果有非常大的影响。

举个例子:

  • A: 先说出自己的分数,然后让自己的分数+1
  • B: 先让自己的分数+1,然后说出自己的分数

这两个情况的输出一样么?明显不同!
假设一开始的分数为x,A的输出为x,B的输出为x+1。

故此,确定命令执行前后是十分重要的。
不肯定执行顺序的时候可以用say命令输出不同数字,通过那些数字推断执行顺序。

这是大型系统常见的一个问题,因为设计大型系统时模块执行的先后次序或许会被忽略,导致问题的发生。

results matching ""

    No results matching ""