如何做出1gt时差?红石音乐中的简单时序问题 |
您所在的位置:网站首页 › mc时钟电路 › 如何做出1gt时差?红石音乐中的简单时序问题 |
本文主要面向萌新,为帮助理解可能会模糊一些难懂的概念。也可能存在错误,请各位大佬不吝赐教。 目录零·认识刻(tick) 一·变速(tick rate) 二·活塞1gt及原理分析 三·命令方块1gt 四·奇奇怪怪1gt 五·总结 零·认识刻(tick) 刻(t,tick),又称游戏刻(gt,game tick),是mc最小时间单位。在默认状态,1t=0.05s,也就是1s内有20tick。而一档中继器为2gt(0.1s),为了方便表达,我们将2tick定义为新时间单位:1rt(red stone tick)即为红石刻。 请注意,游戏刻为基础单位,讨论时1t,2t也默认指gt。在表达与刻有关的问题时,一定要注意gt(t)与rt的区别。同时,MC的时间是量子化的,gt为其最小单位,一般来讲,不存在比1gt更小的时间,也没有1.5gt这种说法。 一·变速(tick rate) 为解决1gt问题,我们可以先从结果入手。众所周知,红石中继器的最小延迟1rt是1gt的二倍。如果我们让gt减半,即1gt’=0.025s,1rt’也就变成了原来的1gt 0.05s,用中继器即可做出等价与原来1gt的延时。为此,我们需要mod的帮助。 在一些mod里(如万能的carpet)存在着变速指令。carpet内,变速指令为/tick rate ??? 问号处为你目标1s内的tick数。易知,tick rate 40即可让tick速加倍。 carpet指令但是,这种方式并没有从根本解决问题。过高的tick速会使电脑卡顿,而且假设我想要tick rate 40下的1gt怎么办?(tick rate 80)所以,就要来到我们今天的重头戏——活塞1gt 二·活塞1gt及原理分析 其实也有过一部分教程讲述了本内容,如经典教程 用单活塞做出单音1gt时差用双活塞做出长链1gt时差但是,这些教程并没有揭示正确原理,给我们的使用带来一定的困难。因此,本文主要通过时序原理来具体讲解活塞1gt。 在讨论时序前,我们要有一定的时序基础知识. 请参考下文及wiki 为简化理解,我从中提取出了对红石音乐有意义的几个关键知识点。 1.游戏阶段 计划刻 TT /NTE 方块事件 BE 方块实体 TE 玩家操作 NU 如何理解游戏阶段这个概念?我们可以这样比喻,游戏进行某种处理就如同人吃早饭,早饭只能在早上吃,过了这个阶段,你要再吃早饭就要等第二天,在其他时间你就算吃饭吃的也不会是早饭。也就是说,特定的处理只能在每tick的特定阶段进行,如果错过了,就只能等到下一个tick。 2.事件所处阶段 中继器、侦测器的激活与熄灭:TT 按钮、红石灯的激活:瞬时;熄灭:TT 拉杆、红石线、音符盒的激活与熄灭:瞬时 音符盒的发声:BE 命令方块的运作:TT 活塞推拉的开始:BE 移动中方块的运算:TE 移动中方块的到位:BE(粘性活塞受短脉冲);TE(粘性活塞受长信号)以3gt区分长短脉冲 玩家移动、放置破坏方块、与方块交互:NU 3.实例分析 3.1 首先从经典例图入手 将信号传导至音符盒一号前中继器及音符盒二号前活塞的瞬间作为初始状态。 分析如下 第1gt 本tick初期,信号到达中继器及活塞 对中继器而言,其加入Next Tick Entry(简称NTE)列表,进入2gt计划刻延迟 对活塞而言,在BE阶段推出,TE阶段运算被推出的红石块,但是由于 TE 阶段有个性质:在 TE 阶段内新增的 TE 实体,并不会立即参与运算,而是会先加入一个临时的列表 addedTileEntityList,等到该 TE 阶段运算结束后再统一添加新 TE 实体至参与运算的 TE 列表 loadedTileEntityList 中,也就是说在 GameTick N 新增的 TE 实体要等到 GameTick N+1 的 TE 阶段才能进行运算(by佛冷) 第2gt 中继器处于TT延迟 活塞在TE阶段运算红石块移动 第3gt 中继器在TT输出信号,音符盒瞬时激活,BE阶段音符盒一号发声,后中继器进入NTE列表 红石块在TE阶段就位并输出信号(长脉冲在TE就位),音符盒瞬时激活,但BE阶段已过,音符盒二号在本gt不发声。后中继器进入NTE列表 第4gt 音符盒二号在BE阶段发声。两个后中继器同步TT计划刻 第5gt 音符盒三号/四号同时发声 流程图: 注1:可以理解中继器在激活时会立刻加入NTE列表,并根据档位给自己赋值(2*档位),每经过一次TT阶段值减一,归零时在TT阶段输出。 注2:本文对于活塞推动中TE阶段的分析不一定准确,但其结果会表现为受长脉冲激活时在第3t的TE输出是毋庸置疑的。 分析这个逻辑,很容易就得到了1gt是如何产生的及这个结构只能产生一组具有时差的音符盒的结论。下面我们来分析长串1gt时差是如何产生的,仍以经典例图为例: 分析如下 第1gt与第2gt与上一例逻辑一致 第3gt 红石块在TE阶段就位并输出信号,但已过活塞二号启动的BE阶段 第4gt BE阶段活塞二号启动,TE阶段红石开始运算 第5gt TE阶段红石块运算 第6gt TE阶段红石块就位,红石线瞬时传递,但错过一号音符盒发声BE,而正常使其后中继器进入NTE 第7gt 一号音符盒发声 第8gt 二号音符盒发声 其后每2gt音符盒发声一个,长链1gt时差成功(因为中继器串只能让音符盒在奇数刻发声) 流程图: 3.2 测试题:标出画框的5个音符盒的发音顺序 答案:红-2gt-黄/蓝(同时)-1gt-绿-1gt-粉 3.3 有玩家行为参与的时序分析 (左)一档中继器-活塞-二档中继器(右)左右结构的区别在哪里?右侧由玩家操作按钮直接输出信号到活塞,左侧经过了中继器转化。 易知左侧与上文分析的结构并无不同,活塞成功卡出了1gt时差,那么我们来看看右侧是否也是这样呢? 第1gt 玩家操作按钮(NU阶段),红石粉瞬间激活,左右中继器均进入NTE列表,但是已经错过了活塞推出的BE阶段 第2gt 中继器TT计时 BE阶段活塞推出,TE阶段计算红石块推出 第3gt 一档中继器TT阶段输出,左侧音符盒BE阶段发声 二档中继器TT计时 TE阶段红石块移动计算 第4gt 二档中继器TT计时 红石块TE时刻就位,错过BE阶段音符盒发声 第5gt 中间与右侧音符盒同时发声 易知,问题关键就在第1gt玩家输入的信号为NU阶段,错过了活塞在本tick的BE推出,造成1gt时差,但是,若音符盒为长串,继续分析 第6gt 中间音符盒发声 第7gt 右侧音符盒发声 可见,1gt时差又回来了。在由中继器启动的单活塞结构中,1gt在结构末产生,且仅对第一个音符盒有作用。在由玩家直接启动的单活塞结构中,1gt在结构初产生,且仅对第一个无效。 换句话说,做长链1gt:玩家启动,用单活塞。中继器启动,用双活塞 xwjcool曾这样总结过活塞延迟 xwj,yyds!xwjcool在群内对活塞延迟的完整讲解截图:(太长不方便放专栏) http://www.Arcueid.xyz/RIT/xwjcool-Piston.png 三·命令方块1gt 这个非常好理解,命令方块接受信号后有1gt延迟才会输出,setblock一个红石块就可以了 范例结构生成红石块清除红石块命令方块的1gt延时类似中继器,会将自身加入NTE计算TT计划刻,因此不受玩家激活干扰 四·奇奇怪怪1gt 树电(JAVA): 树叶受树干更新时,信号延树叶传递(6格内)每格延迟1gt,用侦测器检测可得1gt时差 推出树干收回树干都会产生更新,所以请使用拉杆而非按钮脚电: 信号延脚手架传递每格延迟1gt,用侦测器检测可得1gt时差 本结构由Enzyme125提供五·总结 本文提供了多种做出1gt的方式:活塞,命令方块,树叶脚手架等等。其中着重讲解了活塞1gt的原理。 活塞1gt的关键就在于延迟产生的位置,玩家-活塞,活塞-音符盒,活塞-活塞,如果能掌握原理自然最好,如果不能,记住一个标准结构使用也并无不可。但是,不掌握原理去使用很可能会遇到各种bug,比如本人就曾被玩家激活和中继器激活的差别弄得焦头烂额,因此,如果有条件,还是尽量掌握原理比较好。 本文到此就结束了,如果您有任何问题,如没看懂或认为我的说法有误,欢迎在评论区讨论。 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |