365bet客服电话

沙盒/红石更新延迟理论

沙盒/红石更新延迟理论

红石更新延迟理论是一个根据游戏源代码得出的延迟理论,由Gamepiaynmo提出。该理论可以从游戏底层代码层面分析延迟现象的具体原理。

目录

1 内容

1.1 游戏刻

1.1.1 定义

1.1.2 性质

1.1.3 游戏事件

1.2 漏斗理论

2 发展历史

2.1 红石更新延迟理论的诞生

2.2 红石更新延迟理论的成就

2.3 启动延迟理论和即时更新理论的统一

3 参考

内容[]

参见:游戏刻

在红石更新延迟理论中,有着一些很重要的重要思想:

从红石电路的意义上来说,并不存在真正的同时。两事件发生,一定有先后顺序。这表明,两电路延迟即使相同,也不可能做到同时,必定有一个谁先谁后的顺序,这种顺序取决于谁先被更新。也就是对宏观上来说,延迟短的先激活;对微观上来说,先被更新的先激活。

游戏的内部时间是由自身不断重复的主循环构成的,每一游戏刻历时0.05s,而每一游戏刻内部,则是不同的事项。将所有事项重复一次,便是完成了一次循环,过去了一个游戏刻。正是这种游戏刻的不连续性,造成了启动延迟理论和即时更新理论的表述形态的不同。

由于单个游戏刻内事件严格按照排序来进行,因此在一定程度上能够掌握这种红石更新顺序,这种更新顺序决定了一些特定现象。这也是人们常说的“中继器优先于比较器”的原因。但是有些过于随机的事项,非常容易受到外界变化的影响,乃至于这些事件随地理、游戏版本、Java版本可以是随机的。有可能某一机械在一台计算机上可以运行,在另一台计算机上就会出错,很有可能即使因为涉及到了过于随机的事项。不过即使如此,由于更新顺序相同,这些机械一定是随时间稳定的。

单个游戏刻内的事件严格按照排序来进行,因此如果一些无法用启动延迟理论和即时更新理论解释的现象,却有着十分牢不可破的规律,背后很可能是由更新顺序决定的,由此可以探查这种现象背后的更新顺序。

红石更新延迟理论很好地解释了红石电路中的时序现象,而且达到了比启动延迟理论更精细的精度,甚至可以比较一个游戏刻内的延迟,这种延迟无法用刻来刻画,只能使用先后顺序来描述。

1.8版本中,存在红石中继器链的最后一个中继器无法响应短负脉冲的现象。这说明最后一个中继器和前面所有中继器的地位是不对等的,这个被人难以解释的现象被认为是bug。但在Gamepiaynmo的解释[1]下,这是中继器的优先级不同,使更新顺序不同造成的。

漏斗在Tile Entity事件更新,而一些诡异的现象却无法被启动延迟理论和即时更新理论解释。有着红石更新延迟理论,认定一些可被重复的事必有内部的更新原理。xiaohane2解释了漏斗的更新理论[2],通过实验证实了这个理论。

游戏刻[]

定义[]

将游戏主循环的工作事项花在一根时间轴上,并将“世界时间更新”这一事件作为每一次主循环的开始,也就是一个游戏刻的开始,世界时间更新就称为游戏刻节点。如果某一事件持续的时间跨过了多少个游戏刻节点,就称这一事件的延迟是多少游戏刻。

性质[]

由游戏刻的定义我们可以得出游戏刻具有以下性质:

不连续性:延迟的计算并不考虑某一事件真正持续了多长时间,只考虑其跨过了多少个游戏刻节点。相同延迟的时间持续的时间可能未必相同。

整数性:游戏刻被定义为游戏刻节点的个数,因此必须是整数,不存在小数个游戏刻。

游戏事件[]

玩家可以按照以下顺序分析红石电路:

NTE(Next Tick Entry):计划刻事件

RT(Random Tick):随机刻事件

BE(Block Event):方块事件:活塞作出动作

EU:实体事件:非玩家实体对方块作出的改变,例如箭射中标靶、村民踩下压力板。标靶被取消激活和压力板弹起不属于实体事件。

TE:方块实体事件:方块实体作出改变,例如漏斗吸取物品、移动的活塞变成方块等。

NU:玩家事件

漏斗理论[]

发展历史[]

红石更新延迟理论的诞生[]

启动延迟理论和即时更新理论的种种迹象表明,两者一定是某一机制的不同表现形式,侧重的方面不同使其拥有着截然不同的表述。2015年10月初,Gamepiaynmo在查阅游戏源码后,发表了红石更新延迟理论[3]。

红石更新延迟理论的成就[]

红石更新延迟理论的思想核心就是时间的不连续性,正是这种思想引领着玩家在遇到延迟问题时思考更新时序问题。

红石更新延迟理论也成功解释了一些其他理论所不能解释的现象。

可以看到,红石更新理论重在“更新”,这一点在即时更新理论中小有体会,但并没有出现在启动延迟理论中。将更新理论引入延迟理论,正是前二者的优越之处。这也证明了红石原理内部并非相互独立且互不影响,而是相互联系, 相互影响,共同为游戏功能实现而工作的。也正是如此,红石原理才能发展成一个大的复杂但是有序的有机整体。

启动延迟理论和即时更新理论的统一[]

红石更新延迟理论的另一个作用是,在启动延迟理论的大背景下,启动延迟理论和即时更新理论终于得以统一。在时间运行的时间轴上,通过不同事件作为节点,划分刻的概念,游戏刻和活塞刻不过是选取了不同的节点。这样,事件有1游戏刻未必有1活塞刻,有1活塞刻未必有1游戏刻,通过启动延迟理论和即时更新理论计算得到的结果在数值上不尽相同也就显得不足为怪了。

启动延迟理论将中继器、比较器延迟看做是不变的,是由于游戏刻节点的选取位于更新中继器和比较器的Next Tick Entry事件,那么自然大部分事件更新中继器时必然要跨过这个游戏刻节点,这就使得在大部分情况下中继器和比较器的延迟被发现是定值;而活塞的延迟是可变的,这是由于如果输入信号在Next Tick Entry事件和更新活塞的Block Event事件之间,活塞就会按2gt的延迟推出,如果在这一游戏刻的Block Event事件和下一游戏刻的Next Tick Entry事件之间,更新这一活塞就必须等到下一游戏刻的Block Event事件,活塞就被附加启动延迟了。

即使更新理论将活塞的延迟看作是不变的,是由于活塞刻节点的选取位于更新活塞的Block Event事件,那么大部分事件更新活塞时必然要跨过活塞刻节点,活塞的延迟就总为3pt,同理可以得到中继器和比较器的延迟可以变化的原因。

即使更新理论对漏斗的修正,是因为漏斗会在Tile Entity事件更新,如果将这一事件加入到时间轴上,一个游戏刻就被划分为三段,很自然地,如果不对一个事件在一个活塞刻中是在Tile Entity事件前还是之后更新进行修正,自然会得到错误的结论。玩家输入信号和实体输入信号是在不同位置更新的,且恰分立Tile Entity事件的两边,因此可以用漏斗对这两者进行区分。

参考[]

↑ 关于1.8中中继器组bug的源码解释 —— Gamepiaynmo

↑ 【理论分析】漏斗中的时序现象 —— xiaohane2

↑ [理论分析] 红石更新延迟理论 —— Gamepiaynmo

【Minecraft|延迟学Ⅳ】红石更新延迟理论 —— Rosumint

【Minecraft|延迟学Ⅴ】时间轴与微延迟 —— Rosumint

红石电路原理/方块更新与延迟理论的拓展#第四节-漏斗理论 —— Xiaoyuan-xyz

【Minecraft红石基础教程Ep.21 红石更新延迟理论(上)】降维打击!从代码水平得到的延迟机制有多细致? —— 不过分的深明过分

【Minecraft红石基础教程Ep.22 红石更新延迟理论(下)】高端的理论往往能统一简单的理论(? —— 不过分的深明过分

[小渊红石教程#9] 红石更新延迟理论 —— 小渊xyz

Minecraft 红石理论 P3 第三部分 —— 小渊xyz

[从活塞到游戏机制] 01-游戏刻与微时序 —— TIS_TrinityUnion,肥啾U_ruby,Fallen_Breath

相关推荐