作者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)
推 Cruiser:感謝喔 我來看看... 0. 0a 01/28 22:53
→ volition:方塊更新所花費的時間其實應該還要更短0.007秒以內 01/28 23:01
推 Cruiser:我對機制丁有一些意見,早上再來打 先睡覺 0. 0a 01/29 00:16
→ jeffffliu:先不說機制了 可能改版機制有修正 01/29 01:08
→ jeffffliu:bukkit也有fix 於是我就懶惰了 01/29 01:11
→ volition:1.壓下壓力版 2.下方方塊充能 3.紅石燈變亮(更新) 01/29 01:21
→ volition:4.滿足機制甲 5.活塞伸長後不動 6.紅石燈被向上推 01/29 01:22
→ volition:7.因左邊壓力板還壓著顧紅石燈維持亮著,活塞維持伸長 01/29 01:25
→ jeffffliu:但是 bukkit 1.4.x 跟 1.5預覽版 活塞是不會動的 01/29 01:25
→ jeffffliu:請解釋機制的不同(被毆打 01/29 01:25
→ volition:8.放開壓力板後 9.下面方塊沒充能 10.紅石燈熄滅(更新) 01/29 01:27
→ volition:11.滿足機制乙 12.活塞和紅石燈縮回並維持 01/29 01:29
→ volition:以上使用版本為1.45版本,左邊的重複型BUD測試正常運作 01/29 01:31
→ jeffffliu:如果在bukkit上就失效了(死 01/29 01:36
推 jeffffliu:後續不太對 活塞不是往上推了嗎 9沒衝能就會觸發到 01/29 01:41
→ jeffffliu:推出去的活塞的旁邊沒衝能就失效了縮回去 01/29 01:41
→ volition:8.放開壓力板後 9.下面方塊沒充能 10.方塊(更新) 01/29 01:46
→ volition:11.滿足機制乙 12.活塞和紅石燈縮回並維持 01/29 01:46
→ jeffffliu:9.下面方塊沒充能+紅石灯沒充能 01/29 01:47
→ volition:雖然紅石燈和方塊都算更新,但結果不變 01/29 01:47
→ jeffffliu:1.5的差別在於 檢查的時間點 (不想研究了) 採下去不推 01/29 01:48
→ volition:測試BUD,不要在多人伺服器測(LAG會不準), 01/29 01:58
→ volition:也不要用太新版本,(尤其是有動到活塞延遲時間的版本) 01/29 02:00
→ jeffffliu:你可以自己電腦開伺服器測試 為什麼不測新版本 01/29 02:03
→ jeffffliu:還是你不打算更新(誤 01/29 02:03
→ volition:方塊A和方塊B有可能是同一格,不會衝突,結論依然穩合 01/29 02:05
→ jeffffliu:不過側這個針的蠻累的... 01/29 02:07
→ volition:這篇文章是針對1.4.5以前的版本來說明各種BUD的通則。 01/29 02:18
→ 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)
推 Cruiser:有實例 那再看看實例好了 o. oa ... 01/29 10:59
※ 編輯: volition 來自: 61.64.69.53 (01/29 19:14)
→ volition:避免誤解,所以把方塊修改成方格,以及舉實例說明 01/30 10:54
推 Cruiser:感謝喔 0.0 01/30 11:05