地物規則/分佈型別

出自Minecraft基岩版开发Wiki

遊戲內預設了6種分佈型別用於將地物分佈在一定範圍內,透過填寫對應的介面字串在地物規則或部分地物中使用它們。例如:

"x": {
  "distribution": "uniform",
  "extent": [ 0, 16 ]
}

下表列出了可用的介面字串:

ID 字串 描述
1 uniform 均勻分佈型別,可將目標地物在指定的半開區間(左閉右開)範圍內均勻地隨機放置。
2 gaussian 高斯分佈型別,可將目標地物以高斯分佈的形式隨機放置在指定半開區間(左閉右開)範圍內。
3 inverse_gaussian 逆高斯分佈型別,可將目標地物以逆高斯分佈的形式隨機放置在指定半開區間(左閉右開)範圍內。
4 fixed_grid 固定網格分佈型別,可將目標地物以指定步長和初始偏移量的網格形式在指定閉區間範圍內均勻放置。
5 jittered_grid 抖動網格分佈型別,可將目標地物以指定步長和初始偏移量的網格形式在指定閉區間範圍內隨機放置。
6 triangle 三角分佈型別,可將目標地物以三角分佈的形式在指定的區間範圍內放置。

網格分佈[編輯]

網格分佈分為固定網格分佈和抖動網格分佈,它們都有兩個參數來決定網格的步長和初始偏移量,分別是  step_size grid_offset 。步長的預設值為1,初始偏移量的預設值為0。

網格分佈的語法結構如下:

  •  x/y/z:x/y/z軸座標參數物件。
    • *distribution:隨機分佈型別
    • *extent:分佈範圍。
    •  step_size:網格步長。預設值為1,以方塊為單位。
    •  grid_offset:網格初始偏移量。預設值為0,以方塊為單位。

如果有兩個及以上的座標軸使用了網格分佈,則當某一座標軸上迭代到指定的範圍邊緣(最大範圍)時,遊戲將會跳到下一行從最小範圍處繼續迭代。進行迭代的座標軸的優先級由  coordinate_eval_order 決定,預設值為xzy。也就是説,(前提三個座標軸都使用了網格分佈)預設情況下遊戲會先在x軸上以指定步長進行迭代,假設迭代次數無限大,則當迭代到最大範圍時,遊戲將在z軸上移動指定步長,並回到x軸的最小範圍處繼續迭代(會計入之前已經消耗的步長,其他座標軸也同理),以此類推;當z軸上到達最大範圍處時,遊戲將在y軸上移動指定步長,並回到z軸的最小範圍處繼續迭代,以此類推。下面給出了一個範例:

"iterations": 8,
"x": {
  "distribution": "fixed_grid",
  "extent": [ -2, 2 ],
  "step_size": 3,
  "grid_offset": 1
},
"z": {
  "distribution": "fixed_grid",
  "extent": [ -2, 2 ],
  "step_size": 1
},
"y": 0

該範例以地物原點為中心,在xz座標平面建立了一個5×5的網格。由於x座標軸設定了1格初始偏移,所以遊戲會跳過(0,0),從(1,0)處開始第一次迭代,然後數3格,並在第3格處進行第二次迭代,也就是(4,0)。此時x軸上已經到達最大範圍處了(座標(4,0)是x軸方向上的第5格),由於沒有設定座標判斷順序,遊戲將依照預設的x→z→y的優先級來進行下一步判斷,所以遊戲會在z軸上移動1格(因為沒有設定步長所以預設為1),x軸回到最小範圍處繼續迭代,即在(2,1)處迭代一次。在進行下一次迭代時,遊戲在x軸上數了2格但已到達最大範圍,所以會在z軸上移動1格並繼續把x軸上剩餘的1格數完,即在(0,2)處迭代一次……以此類推,直到8次迭代完成。下面給處了更為直觀的演示:

1
2
3
4
5
6
7
8
往右為x軸正方向,往下為z軸正方向。金磚表示地物原點;鑽石磚表示每次迭代放置地物的位置,上面用數字註明了是第幾次迭代;綠色羊毛表示初始偏移的量;箭頭表示迭代方向。