作者volition (连作者也不会修的BUG)
看板Minecraft
标题[教学]「BUD运作原理的说明」(1.02版)
时间Mon Jan 28 21:16:26 2013
壹、适用版本:1.4.5版本以前
贰、名词说明:
1、「更新」:放置方块、打掉方块、红石线亮和熄灭、红石灯灯亮和熄灭、
泥土变草地、泥土变耕地、熔炉暗与亮等等皆为更新。
2、「充能」:严格来说有分强充能和弱充能,本篇的充能指的是红石线和
压力板会对下方的方块弱充能、开关按钮对左右方的方块弱充能。
3、「方格A」:活塞上一格的周围东南西北四格,(注:下一格的周围四格不算)
指的是位置,不是物体
如图,
http://i.imgur.com/98CwDyq.png
4、「方格B」:没伸长活塞的周围六格,伸长活塞的周围10格
指的是位置,不是物体
如图,
http://i.imgur.com/psSwMRI.png
如图,
http://i.imgur.com/rF1ztus.png
参、BUD运作的机制
机制甲:前提当方格A处在充能的状态下,方格B发生了更新的动作,
则活塞会伸长或维持伸长,然後就不动了。
如图,
http://i.imgur.com/jiiwKwx.png
如图,
http://i.imgur.com/7KqDmnj.png
如图,
http://i.imgur.com/4SdA2Bz.png
机制乙:前提当方格A处在没充能的状态下,方格B发生了更新的动作,
则活塞会缩回或维持缩回,然後就不动了。
如图,
http://i.imgur.com/wsh6bnq.png
如图,
http://i.imgur.com/ohCafAm.png
如图,
http://i.imgur.com/1cYzMwL.png
甲乙加注1:方格B更新所花费时间很短(约0.007秒),
就算方格A的充能不充能状态改变
只要慢个0.1秒(0刻中继器)也赶不上。
甲乙加注2:除了活塞以外其他机关没有这种现象。另外大前提是
活塞黏着的方块要能推得动,像熔炉、处在伸长状态的活塞、
基石、黑曜石就推不动。
机制丙:如图,红石线更新时也会对目标那一格更新,(中继器也会)
http://i.imgur.com/NBF6L9h.png
机制丁:中继器熄掉时,也会对来源的那一格更新,没错不要怀疑来源也会更新,
如图,
http://i.imgur.com/oew7mRv.png
为了验证这个不合常理的机制,所以设计了这个特殊情况,
如图,
http://i.imgur.com/26MtHqa.png
如图,
http://i.imgur.com/kf5g9V4.png
结论:综合以上机制应该就能合理解释各式各样BUD的运作疑惑。
肆、实例一:
http://i.imgur.com/6h5Sh6Y.jpg
按发生时间顺序排序:
1.前提当方格A充能时,
2.活塞周围发生了更新,
3.满足机制甲,所以活塞伸长,并推出羊毛,因为羊毛不见了,
4.所以延迟0.4秒後,
5.中继器才熄掉,因为中继器熄掉了,红石线熄掉,所以方格A没充能,
6.因为中继器熄掉了,所以更新了方格B,(机制丁)
7.满足机制乙,所以活塞缩回,并黏回羊毛,
8.因为羊毛在红石火把上方所以被充能,因为羊毛充能,
9.所以延迟0.4秒後,
10.中继器才充能,因为中继器充能,所以红石线充能,所以方格A变成充能
小结论:先熄灭方格A,然後才更新方格B,所以回到初始情况。
(注:几乎同时)
************************************************************************
实例二:
http://i.imgur.com/cjJbX63.jpg
按发生时间顺序排序:
1.前提当方格A充能时,
2.活塞周围发生了更新,
3.满足机制甲,所以活塞伸长,并推出羊毛,因为羊毛不见了,
4.所以延迟0.1秒後,
5.中继器C才熄掉,因为中继器C熄掉了,所以更新了方格B,(机制丁)
6.更新方格B时,方格A仍然充能,满足机制甲,所以活塞维持伸长,
7.因为中继器C熄掉了,所以延迟0.1秒後,
8.中继器D才熄掉,所以红石线熄掉,所以方格A变成没充能。
小结论:先更新方格B,然後才熄灭方格A,所以结果卡住。
(注:更新方格B花的时间远比0.1秒短)(修改了笔误)
*************************************************************************
实例三:
http://i.imgur.com/NDVL9L0.jpg
按发生时间顺序排序:
1.前提当方格A充能时,
2.活塞周围发生了更新,
3.满足机制甲,所以活塞伸长,并推出羊毛,因为羊毛不见了,所以红石线C熄掉,
4.因为红石线C熄掉,所以更新方块B,(机制丙)
5.更新方格B时,方格A仍然充能,满足机制甲,所以活塞维持伸长,
6.由於红石线C熄掉,所以延迟0.1秒後,
7.中继器才熄掉,因为中继器熄掉了,所以红石线D熄掉,所以方格A变成没充能。
小结论:先更新方格B,然後才熄灭方格A,所以结果卡住。
(注:更新方格B花的时间远比0.1秒短)
***************************************************************************
实例四:
http://i.imgur.com/153sHi4.png
按发生时间顺序排序:
1.当压下压力板时,使得方格A充能
2.因为方格A充能,所以红石灯亮(活塞周围发生了更新),
3.满足机制甲,所以活塞伸长,并推出红石灯,因为压力板仍然压下,故红石灯
依然亮着
4.当放开压力板时,使得方格A变成没充能
5.因为方格A变成没充能,所以红石灯熄灭(=活塞周围发生了更新),
因为方格A变成没充能(=活塞周围发生了更新),
6.满足机制乙,所以活塞缩回,并黏回红石灯
小结论:先熄灭方格A,然後才更新方格B,所以回到初始情况。
(注:压力板底下的方块同时是机制乙的方格A,也同时是方格B,并不冲突)
伍、上述解释了原理,至於BUD的发生的原因,请见另外一篇文章「BUD的原因-假说」
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.64.69.53
※ 编辑: volition 来自: 61.64.69.53 (01/28 22:10)
1F:推 Cruiser:感谢喔 我来看看... 0. 0a 01/28 22:53
2F:→ volition:方块更新所花费的时间其实应该还要更短0.007秒以内 01/28 23:01
3F:推 Cruiser:我对机制丁有一些意见,早上再来打 先睡觉 0. 0a 01/29 00:16
4F:→ jeffffliu:先不说机制了 可能改版机制有修正 01/29 01:08
6F:→ jeffffliu:bukkit也有fix 於是我就懒惰了 01/29 01:11
7F:→ volition:1.压下压力版 2.下方方块充能 3.红石灯变亮(更新) 01/29 01:21
8F:→ volition:4.满足机制甲 5.活塞伸长後不动 6.红石灯被向上推 01/29 01:22
9F:→ volition:7.因左边压力板还压着顾红石灯维持亮着,活塞维持伸长 01/29 01:25
10F:→ jeffffliu:但是 bukkit 1.4.x 跟 1.5预览版 活塞是不会动的 01/29 01:25
11F:→ jeffffliu:请解释机制的不同(被殴打 01/29 01:25
12F:→ volition:8.放开压力板後 9.下面方块没充能 10.红石灯熄灭(更新) 01/29 01:27
13F:→ volition:11.满足机制乙 12.活塞和红石灯缩回并维持 01/29 01:29
14F:→ volition:以上使用版本为1.45版本,左边的重复型BUD测试正常运作 01/29 01:31
15F:→ jeffffliu:如果在bukkit上就失效了(死 01/29 01:36
18F:推 jeffffliu:後续不太对 活塞不是往上推了吗 9没冲能就会触发到 01/29 01:41
19F:→ jeffffliu:推出去的活塞的旁边没冲能就失效了缩回去 01/29 01:41
20F:→ volition:8.放开压力板後 9.下面方块没充能 10.方块(更新) 01/29 01:46
21F:→ volition:11.满足机制乙 12.活塞和红石灯缩回并维持 01/29 01:46
22F:→ jeffffliu:9.下面方块没充能+红石灯没充能 01/29 01:47
23F:→ volition:虽然红石灯和方块都算更新,但结果不变 01/29 01:47
24F:→ jeffffliu:1.5的差别在於 检查的时间点 (不想研究了) 采下去不推 01/29 01:48
25F:→ volition:测试BUD,不要在多人伺服器测(LAG会不准), 01/29 01:58
26F:→ volition:也不要用太新版本,(尤其是有动到活塞延迟时间的版本) 01/29 02:00
27F:→ jeffffliu:你可以自己电脑开伺服器测试 为什麽不测新版本 01/29 02:03
28F:→ jeffffliu:还是你不打算更新(误 01/29 02:03
29F:→ volition:方块A和方块B有可能是同一格,不会冲突,结论依然稳合 01/29 02:05
30F:→ jeffffliu:不过侧这个针的蛮累的... 01/29 02:07
31F:→ volition:这篇文章是针对1.4.5以前的版本来说明各种BUD的通则。 01/29 02:18
32F:→ volition:至於1.5後,哪些会失效,哪些仍然可以用就是另一个问题 01/29 02:21
※ 编辑: volition 来自: 61.64.69.53 (01/29 10:51)
※ 编辑: volition 来自: 61.64.69.53 (01/29 10:57)
33F:推 Cruiser:有实例 那再看看实例好了 o. oa ... 01/29 10:59
※ 编辑: volition 来自: 61.64.69.53 (01/29 19:14)
34F:→ volition:避免误解,所以把方块修改成方格,以及举实例说明 01/30 10:54
35F:推 Cruiser:感谢喔 0.0 01/30 11:05