[教學]「BUD運作原理的說明」(1.02版)

看板Minecraft作者 (連作者也不會修的BUG)時間11年前 (2013/01/28 21:16), 編輯推噓5(5030)
留言35則, 3人參與, 最新討論串1/1
壹、適用版本: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)

01/28 22:53, , 1F
感謝喔 我來看看... 0. 0a
01/28 22:53, 1F

01/28 23:01, , 2F
方塊更新所花費的時間其實應該還要更短0.007秒以內
01/28 23:01, 2F

01/29 00:16, , 3F
我對機制丁有一些意見,早上再來打 先睡覺  0. 0a
01/29 00:16, 3F

01/29 01:08, , 4F
先不說機制了 可能改版機制有修正
01/29 01:08, 4F

01/29 01:09, , 5F
左邊1.4.X 1.5結果不同
01/29 01:09, 5F

01/29 01:11, , 6F
bukkit也有fix 於是我就懶惰了
01/29 01:11, 6F

01/29 01:21, , 7F
1.壓下壓力版 2.下方方塊充能 3.紅石燈變亮(更新)
01/29 01:21, 7F

01/29 01:22, , 8F
4.滿足機制甲 5.活塞伸長後不動 6.紅石燈被向上推
01/29 01:22, 8F

01/29 01:25, , 9F
7.因左邊壓力板還壓著顧紅石燈維持亮著,活塞維持伸長
01/29 01:25, 9F

01/29 01:25, , 10F
但是 bukkit 1.4.x 跟 1.5預覽版 活塞是不會動的
01/29 01:25, 10F

01/29 01:25, , 11F
請解釋機制的不同(被毆打
01/29 01:25, 11F

01/29 01:27, , 12F
8.放開壓力板後 9.下面方塊沒充能 10.紅石燈熄滅(更新)
01/29 01:27, 12F

01/29 01:29, , 13F
11.滿足機制乙 12.活塞和紅石燈縮回並維持
01/29 01:29, 13F

01/29 01:31, , 14F
以上使用版本為1.45版本,左邊的重複型BUD測試正常運作
01/29 01:31, 14F

01/29 01:36, , 15F
如果在bukkit上就失效了(死
01/29 01:36, 15F

01/29 01:40, , 16F

01/29 01:40, , 17F

01/29 01:41, , 18F
後續不太對 活塞不是往上推了嗎 9沒衝能就會觸發到
01/29 01:41, 18F

01/29 01:41, , 19F
推出去的活塞的旁邊沒衝能就失效了縮回去
01/29 01:41, 19F

01/29 01:46, , 20F
8.放開壓力板後 9.下面方塊沒充能 10.方塊(更新)
01/29 01:46, 20F

01/29 01:46, , 21F
11.滿足機制乙 12.活塞和紅石燈縮回並維持
01/29 01:46, 21F

01/29 01:47, , 22F
9.下面方塊沒充能+紅石灯沒充能
01/29 01:47, 22F

01/29 01:47, , 23F
雖然紅石燈和方塊都算更新,但結果不變
01/29 01:47, 23F

01/29 01:48, , 24F
1.5的差別在於 檢查的時間點 (不想研究了) 採下去不推
01/29 01:48, 24F

01/29 01:58, , 25F
測試BUD,不要在多人伺服器測(LAG會不準),
01/29 01:58, 25F

01/29 02:00, , 26F
也不要用太新版本,(尤其是有動到活塞延遲時間的版本)
01/29 02:00, 26F

01/29 02:03, , 27F
你可以自己電腦開伺服器測試 為什麼不測新版本
01/29 02:03, 27F

01/29 02:03, , 28F
還是你不打算更新(誤
01/29 02:03, 28F

01/29 02:05, , 29F
方塊A和方塊B有可能是同一格,不會衝突,結論依然穩合
01/29 02:05, 29F

01/29 02:07, , 30F
不過側這個針的蠻累的...
01/29 02:07, 30F

01/29 02:18, , 31F
這篇文章是針對1.4.5以前的版本來說明各種BUD的通則。
01/29 02:18, 31F

01/29 02:21, , 32F
至於1.5後,哪些會失效,哪些仍然可以用就是另一個問題
01/29 02:21, 32F
※ 編輯: volition 來自: 61.64.69.53 (01/29 10:51) ※ 編輯: volition 來自: 61.64.69.53 (01/29 10:57)

01/29 10:59, , 33F
有實例 那再看看實例好了 o. oa ...
01/29 10:59, 33F
※ 編輯: volition 來自: 61.64.69.53 (01/29 19:14)

01/30 10:54, , 34F
避免誤解,所以把方塊修改成方格,以及舉實例說明
01/30 10:54, 34F

01/30 11:05, , 35F
感謝喔 0.0
01/30 11:05, 35F
文章代碼(AID): #1H1demJX (Minecraft)