五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

MCBE紅石系統(tǒng)運行不完全分析(1)

2020-09-12 21:20 作者:hhhxiao_  | 我要投稿

前言

MCBE的紅石系統(tǒng)已經(jīng)出了五年了,在此之后出現(xiàn)了很多優(yōu)秀的玩家和優(yōu)秀作品,在眾多玩家的努力之下也產(chǎn)生了一個十分完善的基于實踐和經(jīng)驗的理論體系。但是遺憾的是純理論的源碼級的分析還幾乎是空白。在這篇專欄(系列)中我嘗試著填補空白,盡量完成這一工作,并隨時棄坑。

有一說一,我自己連33門都不會做,所以這篇專欄幾乎可以說出自云玩家之 手,請謹慎觀看(

預備知識:

  • 了解最基本的紅石原件的基本功能

紅石原件分類

在游戲內(nèi)部,紅石原件的分類是這樣一個樹形結(jié)構(gòu),這也是整個紅石系統(tǒng)運行的基礎(chǔ),詳細信息見表。

BaseCircuitComponent ? ? ? CSSC
BaseRailTransporter ? ?MCPR ?
ProducerComponent
? ? ? ?CapacitorComponent ? CSCA
? ? ? ? ? ?ComparatorCapacitor
? ? ? ? ? ?PulseCapacitor
? ? ? ? ? ?RedstoneTorchCapacitor
ConsumerComponent ? ?CSCC
?PistonConsumer
PoweredBlockComponent ? CSPB
ProducerComponent ? ? ?CSPC
TransporterComponent ? CSTR


看不懂英語不用管,看下面的幾條就行了:

  • producer就是自身發(fā)出信號的(比如紅石塊,拉桿等),下稱生產(chǎn)者

  • capacitor就是比較器中繼器火把和觀察者

  • transporter就是紅石線(傳遞信號)

  • cunsumer就是接受信號的,比如活塞,發(fā)射器等等,下面統(tǒng)稱為消費者

  • 鐵軌?鐵軌是啥

紅石原件的信號源(Source)

信號源

這里先要給出一個概念叫做信號源,說白了就是給該原件提供紅石能量的原件。我們來看個例子:



  • 給比較器提供能量的是紅石塊和火把,所以它有兩個信號源也就是右邊的火把和紅石線。

  • 給中繼器提供的能量的是比較器,所以它的源就是中間的比較器

  • 同理紅石燈和紅石燈右邊的紅石線的信號源是中繼器

注意

  • 紅石線不會作為信號源,因為它只能傳遞能量不產(chǎn)生能量

  • 生產(chǎn)者本身就能提供能量,所以它沒信號源

距離

游戲中每個原件都維護著它自己的所有信號源以及和該信號源的距離。當紅石原件發(fā)生增刪的時候原件就會從重新搜索整個電路找到自己的信號源,并在這個過程中計算出自己和信號源的距離,這個距離在最簡單的情況下就是曼哈頓距離減1,當然也會隨著紅石原件的各種連接細節(jié)等等有所調(diào)整。這些不是重點就不過多敘述了(也沒認真看過)。比如我們打掉右下角的紅石塊,那么中繼器就只有一個信號源--火把了。

紅石信號強度的計算

這個算法其實非常簡單:

首先計算每個信號源為自己提供的信號強度 strength =sourceStrength - distance ,說白了就是用信號源的信號強度減去信號源和自己的距離。然后從所有信號源提供的信號強度中選擇最強的信號作為自己的信號(當然如果這個信號是負數(shù)就取0了)。來看個簡單的例子:


綠色方塊上方的紅石線有兩個信號源,它和左上方的紅石塊的距離是3,所以該紅石塊為它提供的信號強度就是12,而左下側(cè)的紅石塊的距離是1,提供的信號強度是15 - 1 = 14.最后該紅石線的信號強度就是max(12,14) = 14.

開胃小菜完成了后面就是稍微硬核的gt級別的微時序分分析了(

信號更新過程

紅石刻

看圖說話如下圖是游戲的運行,一個方格是1gt,我們把紅色的gt稱之為紅石刻,白色的暫時叫做普通刻。。在這樣的gt是會更新紅石信號的。兩個紅石刻之間的間隔也叫紅石刻(redstone tick,rt),易得1rt = 2gt = 0.1s


信號的更新方式

原件有兩種更新方式:

  • 先根據(jù)當前電路狀態(tài)計算出所有的信號值稍后再一起更新,暫時叫做緩存更新吧

  • 立即更新,算出來值就馬上更新了

capacitor(比較器,中繼器,火把)和紅石線是緩存更新的,其它的諸如生產(chǎn)者和消費者都是立即更新的。

1rt做了什么

在游戲內(nèi)關(guān)于紅石的1rt做的事情說多其實也不多,一共就下面三件事情(按照順序):

  • 根據(jù)當前電路狀態(tài)(也就是上一個rt的電路)計算capacitor和紅石線的信號,怎么計算也就是上面的算法(max(信號值 - 距離))。注意因為這幾個是緩存更新的,因此算出來的新值其實是存起來了,原件的實際信號并沒有進行更新。

  • 計算和設(shè)置capacitor和和生產(chǎn)者的信號,到這一步才把capacitor的實際值進行更新(當前值 = 新值即可)。對于生產(chǎn)者沒啥說的,是多少就多少,比如上1gt你拉了拉桿,到這時候就會把拉桿的值更新為15.

  • 更新紅石線和消費者的信號。對于紅石線也是(當前值 = 新值),而對于消費者就是當前值設(shè)置為max(信號值 - 距離)。

為方便理解來舉個例子:


  • 拉下拉桿后拉桿的信號立即變?yōu)?5(這個和紅石系統(tǒng)無關(guān)):

  • 然后等到下一個紅石刻開始:

  • 兩根紅石線和中繼器的唯一信號源都是拉桿,然后他們就根據(jù)拉桿計算新值,這個值分別是14,15,14,但是這時候這三個器件的信號都還是0(因為新值緩存了沒更新)

  • 下一個行為拉桿信號還是15無事發(fā)生,這時候中繼器新值和舊值同步了,它的信號變成了15(中繼器雖然有延時,但是這個信號是立即更新的)

  • 再到下一個行為,紅石線同步自己的新舊值從0變到14和15;綠燈的唯一信號源是15,距離是1,因此它的信號從0變成15-1 = 14(注意這個值和與他連的紅石線沒啥關(guān)系),藍燈的唯一信號源是中繼器,它和中繼器的距離為0,因此信號更新為15 - 0 = 15

然后這一rt結(jié)束了,等到下一個gt紅石線和兩個燈同時亮起(這個渲染細節(jié)和紅石系統(tǒng)無關(guān))。

???

你可能會疑惑為什么兩個燈同時亮了,又或者你覺得中繼器是有延時的,不會立即更新信號。但是事實就是如此。這個現(xiàn)象是由更新順序和信號計算計算共同決定的。

再來做個簡單練習,分析一下拉下拉桿后的所有原件的信號變化:


未完待續(xù)


MCBE紅石系統(tǒng)運行不完全分析(1)的評論 (共 條)

分享到微博請遵守國家法律
来安县| 盐池县| 兴和县| 台前县| 晋宁县| 临武县| 楚雄市| 绥棱县| 准格尔旗| 西平县| 永州市| 和平县| 嵩明县| 马龙县| 宜昌市| 陈巴尔虎旗| 民权县| 邹城市| 阿拉尔市| 开远市| 吉水县| 庆城县| 盱眙县| 芮城县| 宜宾市| 射阳县| 墨竹工卡县| 昌图县| 分宜县| 安多县| 晋城| 襄樊市| 昂仁县| 保山市| 萨嘎县| 乐东| 佛坪县| 天等县| 微山县| 宁都县| 抚顺市|