经验分享
红石线瞎更新原理
红石线瞎更新原理表述为:红石线有着十分复杂甚至有些多余的更新顺序,这种更新顺序不仅不与激活顺序相同,且随空间随机,但随时间稳定。
其具体更新原理为:
以粉座标为中心, 将它与它周围6个毗邻更新核(即会参与更新的方块)以"中心 -Y +Y -Z +Z -X +X" 的顺序加入HashSet。
为每一个更新核计算一个特定值 hashCode (y + z * 31) * 31 + x。
为每一个更新核计算一个特定值 bucketIndex = hashCode ^ (hashCode >>> 16 ) & 15。
以bucketIndex对更新核进行排序,决定更新顺序,如bucketIndex相同则按"中心 -Y +Y -Z +Z -X +X"顺序排序。
红石线瞎更新原理是之前的玩家对更新顺序的局限性的体现,现在则用来描述红石粉的这种反直觉且位置相关的更新顺序。对于两路在更新顺序上完全相同的线路,红石线瞎更新原理告诉我们,很难预先判断两条线路的先后顺序。虽然对游戏来说,这一随机仅仅是伪随机,是可以被计算出来的,但是对于玩家来说,这一计算显得过于困难。因此在实际应用中,不建议预先判断两条电路的先后顺序。
值得注意的是,两条在更新顺序上完全相同的线路并不一定意味着有相同数量的红石线,任何长度的红石线在更新顺序上都是同时的。
红石线更新时,会产生很多理论上不必要的方块更新,这会带来很多不必要的卡顿。因此红石线带来卡顿是有道理的,但要注意只有红石线产生更新时会带来大量卡顿,也就是红石线被激活和撤销激活时,已经激活或未被激活的红石线没有这一卡顿。
特别地,红石线在撤销激活时会比激活时产生更多的方块更新。因为激活时红石线会被直接激活为指定的信号强度,但是在撤销激活时,红石线之间会相互激活,使得红石线会由当前强度逐渐减小,并经过之间所有的信号强度,每个信号强度都会产生大量的方块更新,因此撤销激活时会产生非常多的方块更新。Panda4994的数据说明,用拉杆激活3个红石线会产生144次方块更新,而撤销激活时这一数字是1782次。
红石科技搬运组的Crazy_H搬运了panda4994的一个视频(这个网站 ),视频标题为“红石随机性和延迟”。讲述了红石线更新中的位置随机性,以及尝试制作mod来缓解红石线会造成不必要的卡顿这一问题。
红石线的不必要卡顿使得一些玩家尝试在电路的制作过程中尽可能的减少红石线的数量。除了这个原因之外,一些玩家为了使电路可以被自由移动,或发现其他方式传递红石信号更节省空间,以及一些其他的目的,也在有意地减少红石线的数量,甚至是在电路中不使用红石线。红石界刮起了一阵小的“去红石化”浪潮。
搬运者注:原文依照Minecraft 1.12.2的红石系统及2022年社区对红石粉更新顺序的理解编写,略有过时,过时处修改并同步至红石电路Wiki。
本文依CC-BY-SA协议转自红石电路Wiki,编写者小渊xyz、Harry-hq
其具体更新原理为:
以粉座标为中心, 将它与它周围6个毗邻更新核(即会参与更新的方块)以"中心 -Y +Y -Z +Z -X +X" 的顺序加入HashSet。
为每一个更新核计算一个特定值 hashCode (y + z * 31) * 31 + x。
为每一个更新核计算一个特定值 bucketIndex = hashCode ^ (hashCode >>> 16 ) & 15。
以bucketIndex对更新核进行排序,决定更新顺序,如bucketIndex相同则按"中心 -Y +Y -Z +Z -X +X"顺序排序。
红石线瞎更新原理是之前的玩家对更新顺序的局限性的体现,现在则用来描述红石粉的这种反直觉且位置相关的更新顺序。对于两路在更新顺序上完全相同的线路,红石线瞎更新原理告诉我们,很难预先判断两条线路的先后顺序。虽然对游戏来说,这一随机仅仅是伪随机,是可以被计算出来的,但是对于玩家来说,这一计算显得过于困难。因此在实际应用中,不建议预先判断两条电路的先后顺序。
值得注意的是,两条在更新顺序上完全相同的线路并不一定意味着有相同数量的红石线,任何长度的红石线在更新顺序上都是同时的。
红石线更新时,会产生很多理论上不必要的方块更新,这会带来很多不必要的卡顿。因此红石线带来卡顿是有道理的,但要注意只有红石线产生更新时会带来大量卡顿,也就是红石线被激活和撤销激活时,已经激活或未被激活的红石线没有这一卡顿。
特别地,红石线在撤销激活时会比激活时产生更多的方块更新。因为激活时红石线会被直接激活为指定的信号强度,但是在撤销激活时,红石线之间会相互激活,使得红石线会由当前强度逐渐减小,并经过之间所有的信号强度,每个信号强度都会产生大量的方块更新,因此撤销激活时会产生非常多的方块更新。Panda4994的数据说明,用拉杆激活3个红石线会产生144次方块更新,而撤销激活时这一数字是1782次。
红石科技搬运组的Crazy_H搬运了panda4994的一个视频(这个网站 ),视频标题为“红石随机性和延迟”。讲述了红石线更新中的位置随机性,以及尝试制作mod来缓解红石线会造成不必要的卡顿这一问题。
红石线的不必要卡顿使得一些玩家尝试在电路的制作过程中尽可能的减少红石线的数量。除了这个原因之外,一些玩家为了使电路可以被自由移动,或发现其他方式传递红石信号更节省空间,以及一些其他的目的,也在有意地减少红石线的数量,甚至是在电路中不使用红石线。红石界刮起了一阵小的“去红石化”浪潮。
搬运者注:原文依照Minecraft 1.12.2的红石系统及2022年社区对红石粉更新顺序的理解编写,略有过时,过时处修改并同步至红石电路Wiki。
本文依CC-BY-SA协议转自红石电路Wiki,编写者小渊xyz、Harry-hq
评论 (0)