当前位置: 首页 > 滚动

游戏刻-微时序分解入门-全球聚看点

来源:哔哩哔哩    时间:2023-02-20 19:59:40

本专栏的内容是关于游戏刻的相对底层的内容,又是红石玩家的必备知识,可以说是进阶门槛,学习这部分知识可以比较清晰的理解世界运行原理,红石延时分析,同时可以解释大部分宏观“玄学”问题。

首先我们来认识一下游戏在运行的时候是怎么样的一个状态。把游戏比作一部电影,电影在播放时我能能感觉人物的移动很自然流畅,但是我们知道电影也是一帧一帧播放的,每一帧人物都只变化了一点点,快速连起来才会看起来自然,游戏也是这样,世界的运行也是类似一帧一帧的。游戏里的“一帧”,叫一游戏刻(Game Tick),也就是常说的gt。


(资料图片)

如果游戏也像电影慢放那样1gt1gt的流动,我们就能看见物体也是一段一段移动的。游戏中在变化的各个事物,并不是同时变化的,而是按顺序逐个进行。比如在某一游戏刻,中继器亮起,僵尸往前移动一厘米,活塞推出了,长出一棵树,这些事件都是依次执行的,如果有方法更细微的放慢时间,那会看见中继器先亮起,接着僵尸再移动一厘米,再然后去执行别的动作。总结一下就是,在每一个gt,所有事物都是依次执行的。

游戏在每个gt都会按一定的顺序执行所有事件。为了方便理解,这里我将每一个游戏刻比作一个星期,我们肉眼看到的变化相当于上周到这周总共7天发生的变化,而变化在每天都有发生。我来通过红石原件的激活来屡一下游戏在一星期里要做的事

● 周日,是玩家发号施令的日子,就像上帝一样,一般会通过拉杆按钮。

● 周一是中继器的工作日,中继器在接到命令时就会开始计划在什么时候改变状态

● 周三是活塞工作的日子,活塞需要连续工作3个工作日,也就是3个周三

● 周五是活塞交付成果并停机的日子。

用上面的理论,先来分析一下玩家用拉杆同时激活一个中继器和一个活塞,如下图。

● 第零周的周末,玩家拉下拉杆,命令中继器和活塞工作,这时候中继器那边已经收到命令,并且计划两周后亮起,也就是第二周的周一亮起。

● 第一周,周一,中继器还在延迟中,所以没动静,到了周三,活塞开始工作。

● 第二周,周一,跟计划的一样,中继器亮起来了,到了周三,活塞工期还没结束,所以继续工作。

● 第三周,周一中继器无变化,周三活塞依旧在工作,但是干完今天就不用干了,到了周五,活塞把工作成果交付了,并彻底停下了工厂。

通过这个例子,我们就能发现,在这种情况下中继器延时2gt,活塞延时3gt。准确的说,从玩家拉下拉杆开始,中继器到第二周周一结束,而活塞是到第三周周五。

第二个例子,用拉杆控制中继器,中继器再激活活塞。

● 第零周的周末,玩家拉下拉杆,中继器计划两周后亮起。

● 第一周,无事发生。

● 第二周,周一中继器如约亮起来了,中继器输出的能量可以激活活塞,在周三,活塞就开始工作了。

● 第三周,周三活塞工作

● 第四周,周三活塞工作,周五活塞工作交付。

这里可以发现了一个问题,活塞的延时发生了一些变化,上一个例子中,活塞最终的延时是3gt,中继器2gt,加起来一共是5gt,而在这个例子中,加起来总共却是4gt。

发生这种变化的原因主要在于激活活塞的方式不同,如果由玩家通过拉杆激活,那么活塞要在下一周才会开始工作,而通过中继器去激活活塞,周一中继器亮起,周三活塞就被激活,相当于本周就开始工作。两种不同的激活方式导致最终延时的偏差。

在游戏中,我们常用的游戏阶段有以下几个,按执行顺序排

● 计划刻TT(Tile Tick):执行大部分红石原件,比如中继器、比较器、侦测器、红石火把、发射器、投掷器

● 随机刻RT (Random Tick):植物生长,天气现象

● 方块时间BE(Block Event): 活塞推动和拉回的开始

● 实体EU(Entity Update): 玩家以外的实体

● 方块实体TE(Tile Entity): 活塞运动正常停止,漏斗

● 玩家操作NU(Network Update):玩家相关的事件,破坏、放置、交互

用一星期的说法来讲,就是在周二多了一个随机刻,在周四多了一个实体运算,实际上游戏还有很多其他的阶段,一周七天肯定是排不下的,因为用到得比较少不做展开。顺便一提,红石线是没有延迟的,不管在什么阶段激活都能瞬间亮起。

最后再用这套理论来解释一个宏观上的玄学例子。下图的装置,拉下拉杆活塞开始运动后,会短暂的释放被压线阻断的红石信号(移动中的方块不压线),钻石块活塞被这个信号直接激活,而金块活塞需要经过一个一档中继器。

结果是金块活塞“失粘”了,直接激活的钻石块活塞把方块拉了回来。

在分析这个问题前再补充一点知识,当粘性活塞正常推出时会在TE阶段结束运动,如果信号提前消失了,则会立刻在最近的BE阶段强制结束,并且出现“失粘”的现象。

● 第零游戏刻,玩家拉下拉杆。

● 第一游戏刻,BE阶段活塞开始运动,粘液块不再压线,信号传到了中继器和钻石块活塞,钻石块活塞收到信号立刻开始运动,因为还在BE阶段。中继器计划在第三游戏刻亮起,

● 第二游戏刻,中继器延时中,钻石块活塞推动中,无事发生。

● 第三游戏刻,TT阶段中继器开始亮起,BE阶段金块活塞开始推出,到了TE阶段另一个粘液块已经将红石线压断,同时钻石块已经推到位结束了,活塞在结束运动时会给自身一个更新,钻石块活塞发现信号消失,于是在下一个游戏刻的BE阶段开始进行一个正常的收回,所以钻石块是能被粘回来的。由于红石线又被压线阻断,中继器又计划在第五游戏刻TT阶段熄灭。

● 第四游戏刻,中继器延时中,无事发生。

● 第五游戏刻,TT阶段中继器熄灭,金块活塞如果正常推出会在第五游戏刻的TE阶段结束,然而信号在第五游戏刻的TT就消失了,这个时候就触发了“失粘”。

我们一般常说长度2gt及以下的信号会让粘性活塞“失粘”,上面的例子说明,“失粘”条件其实是活塞受到的信号没能跨过3个BE阶段。

本专栏主要内容已经结束了,如果要熟练掌握时序的分析还需要平时多想多练习,如果你能完全理解本专栏的内容,可以再去fallen专栏更详细地学习一下。

有问题可以在评论中提出,有勘误或者建议也希望能留下你的声音。

参考资料,fallen的专栏:CV4122124

推荐内容

Copyright   2015-2022 华东导报网 版权所有  备案号:京ICP备2022016840号-41   联系邮箱:2 913 236 @qq.com