幾乎所有的遊戲(包括Minecraft)都是由一個大的程式循環驅動的。正如時鐘中的每個齒輪都與鐘擺同步一樣,驅動遊戲仿真所涉及的每個任務都與遊戲循環相同步。相稱地,遊戲循環的一個週期被稱之為一刻(tick)。
遊戲刻[]
Minecraft的絕大多數運算在一個大循環內執行,執行了一次這個循環就執行了一刻。為避免歧義,玩家一般將其稱之為遊戲刻(Game Tick,簡稱gt)。
一般情況下,遊戲固定以每秒鐘20刻的速率執行,因此一刻的時間為0.05秒(50毫秒,或一秒鐘的二十分之一)每秒刻數(ticks per second,縮寫為TPS)可用于衡量遊戲的執行速度,也可透過/tick rate
修改其預設值。然而,如果計算機無法跟上這個速度,那麼TPS會減少。由於絕大多數操作都是基於刻數而非現實中的時間來計時,許多操作在速度較慢的計算機上需要更長的時間。
有一個與每秒刻數(TPS)相關的統計量,稱作每刻毫秒數(milliseconds per tick,縮寫為MSPT),即伺服器實際用於完成一刻內計算的耗時。在未使用/tick rate
修改時,遊戲的正常執行速度為20TPS。只有當MSPT不高於50時,TPS才能維持在20。通常情況下,以下因素是伺服器端卡頓的主要誘因:
- 漏斗會頻繁嘗試檢查其上方是否有物品。用任一含有物品欄的容器方塊或堆肥桶即可停止此類檢查。也可以利用水更快地運輸散裝物品。
- 紅石機構。紅石元件,尤其是紅石粉會導致大量的方塊更新、亮度更新和卡頓。關閉一些暫不使用的紅石裝置和時鐘、儘量減少空氣空間有助於緩解卡頓情況。
- 生物AI。可以用照明控制怪物的生成,並使用更高效的技術養殖家畜。
在Java版中,MSPT值在除錯畫面中顯示為「ms ticks」。打開幀生成時間圖表(Alt + F3)時可查看TPS值。這兩種顯示都只能在多人遊戲的主機或單人遊戲上可見,因為資料來自Minecraft遊戲裏的內建伺服器端。
遊戲流程[]
在Java版中,遊戲循環的每個週期中,以下行為會依次處理:
區塊刻[]
作為遊戲刻的一部分,每個遊戲刻都會對特定的區塊處理區塊刻。
在Java版中,載入類型為強載入且其中心與玩家(非旁觀者模式)之間的水平距離小於128個方塊的區塊在每次遊戲刻內得到處理。這裏應該注意以下幾點:首先,區塊應當載入成處理實體的區塊;其次,如果區塊接收到區塊刻,即使區塊中的某些方塊超出128個方塊半徑,它們也可以像正常情況一樣接收隨機刻;最後,因為128方塊是水平距離,所以玩家沿Y軸的位置無關緊要。
在基岩版中,每個遊戲刻內,所有載入的區塊都得到區塊刻處理。
以下行為在某個區塊得到區塊刻處理時會發生:
- 生物自然生成。
- 暴風雨天氣下,閃電可能在區塊內某處生成(1⁄100000的機率)。
- 每一縱向上的最頂端方塊
[需要更多資訊]有1⁄16的機率檢查天氣更新: - 區塊內一定數量的方塊受到隨機刻處理,如下所述。
隨機刻[]
在Java版中,在每個遊戲刻,執行區塊刻的區塊中,每個區段預設會被隨機選出randomTickSpeed
個方塊給予隨機刻,數量可由/gamerule randomTickSpeed
自訂(預設為 3)。在基岩版中,每個遊戲刻每個區塊預設會隨機選出區段數×2.5×randomTickSpeed
個方塊給予隨機刻,同樣可由/gamerule randomTickSpeed
自訂(預設為 1,但等效於在Java版中的2.5倍數值)。同一個方塊可以被選中多次。
大部分方塊不會受到隨機刻影響,但是以下方塊會利用它做一些事:
- 農作物可能生長或拔除。
- 蘑菇可能傳播或拔除。
- 藤蔓可能傳播。
- 火可能生起或蔓延。
- 冰和雪層可能融化。
- 樹葉可能枯萎。
- 耕地的濕潤程度會更新。
- 仙人掌、甘蔗、海帶、竹子、歌萊花和甜莓灌木叢可能生長。
- 草地和菌絲土可能傳播。
- 草地、菌絲土和菌絲石可能會退化(若且唯若條件滿足時)。
- 樹苗可能長成樹。
- 熔岩可能使附近的方塊著火。
- 發光的紅石礦會熄滅。
- 地獄傳送門方塊可能生成一個殭屍化豬布林。
- 海龜蛋破裂或孵化。
- 營火冒出煙霧。
- 紫水晶芽床可能會在側面沒有固體方塊之處長出紫水晶晶簇。
- 銅方塊(或任何其未氧化的變體)可能會進一步氧化。
- 鐘乳石可能會填充正下方的鍋釜。
因為隨機刻是被隨機賦予的,無法預測某個方塊何時會接收到隨機刻。
在Java版中,因為隨機刻是隨機產生的,所以沒有辦法預測一個方塊下一次得到隨機刻的時機。兩次隨機刻時間間隔的中位數為47.30秒(946.03遊戲刻)。也就是說時間間隔有50%的機率等於或短於47.30秒,有50%的機率等於或長於47.30秒。不過,有時候這個時間間隔會長得多或短得多:比如,時間間隔有1.38%的機率會比一秒還短,且有1.23%的機率比五分鐘還長。方塊每次更新時間的平均數為68.27秒(1365.33遊戲刻)。若要了解這些數字背後的數學原理,請參閱幾何分佈。
計劃刻[]
一些方塊可能會請求在將來的某一個遊戲刻更新方塊,這種更新方塊的方式被稱為計劃刻。在一段時間後必定發生並且行為可以預測的變化,往往使用這種「計劃刻」——比如,紅石中繼器會在Java版中計劃一刻之後改變其狀態,水在需要流動時會計劃一個計劃刻。
作為遊戲刻的一部分,已經請求計劃刻的方塊所在之處會得到給定量的刻。
在Java版中,計劃刻有兩種:方塊計劃刻和液體計劃刻。方塊計劃刻的處理順序首先取決於優先級,其次取決於計劃順序。優先級越小,執行時間越早。若紅石中繼器指向紅石二極管的背面或側面,則該中繼器將有-3的優先級。若中繼器準備熄滅,則優先級為-2,否則中繼器將有-1的優先級。若紅石比較器指向紅石二極管的背面或側面,比較器將有-1的優先級。其他所有方塊計劃刻的優先級都為0。方塊計劃刻執行完後,將處理液體計劃刻。液體計劃刻沒有優先級,僅根據計劃順序依次執行。
在Java版中,每個遊戲刻內所能處理的最大計劃刻數是65536。在基岩版中,每個遊戲刻內,一個區塊所能處理的最大計劃刻數為100。
紅石刻[]
一個紅石刻(Redstone Tick,簡稱rt)代表了兩個遊戲刻,長度一般為1⁄10秒。最早玩家將其定義為1檔紅石中繼器的延遲。
在基岩版中,紅石刻作為遊戲機制是並發的,紅石訊號的傳遞受到紅石刻的影響。
在Java版中,紅石刻不是「真實」存在的事物,但是這個由社群創造的術語使得紅石工作更加簡單,因為絕大部分紅石元件的延遲都是2gt的整數倍。
活塞刻[]
即時更新理論認為活塞啟動的延遲為0,實體階段至方塊事件階段屬於一遊戲刻,即以方塊事件階段的結束劃分遊戲刻,這種「遊戲刻」稱為活塞刻。音階盒發聲的啟動延遲和活塞相同,也是0活塞刻。計劃刻元件按活塞刻計的延遲則不固定。
歷史[]
Java版 | |||||
---|---|---|---|---|---|
1.20.2 | 23w31a | 現在區塊刻處理時露天方塊檢查天氣更新的頻率受遊戲規則randomTickSpeed 影響。 |
參見[]
版本 | |||||||
---|---|---|---|---|---|---|---|
開發週期 |
| ||||||
技術 |
| ||||||
多人遊戲 | |||||||
遊戲訂製 |
版本 |
| ||||||
---|---|---|---|---|---|---|---|
開發 |
| ||||||
技術性 | |||||||
多人遊戲 | |||||||
特色功能 |
語言