Function (函數) 做出超頻執行:
先設置一個.mcfunction檔案為command,路徑在main下,
並在該function內輸入以下指令:
function main:command |
最後你會得到一個結果為:
已從main:command中執行 (數字) 個指令 |
這意味著這一條指令導致重複循環此function直到連鎖執行上限值(無限循環執行)
》Minecraft中使用maxCommandChainLength規則即是防止這種無限次數超頻的發生,
否則將會導致瞬間執行指令數量過大而崩潰
原理:
如果在一連串指令中有一條/function指令時,
則此function執行過一遍後才會繼續執行下一個連接的指令
假設有1個.mcfunction檔案為say,路徑在chat下
並在該function內輸入以下指令
say chat 1 say chat 2 |
以及執行以下的指令(由上往下執行)
say hello say this's test function chat:say say run function say end |
[@] hello [@] this's test [@] chat 1 [@] chat 2 [@] run function [@] end |
超頻執行的應用:
你可以把超頻執行用在執行「多數」重複性指令使用,
超頻執行重複的指令上並沒有連鎖指令方塊串執行重複的指令順暢,
因為輸出量會比連鎖指令方塊來的大,是一個有風險性的應用
連鎖指令在執行重複的指令缺點上是會有「上限次數」的限制,
而且沒有程式輔助要排列非常多條重複的指令時會非常麻煩
比起超頻執行指令來講輸出量和資源消耗量相對地比較小
相對的超頻執行在執行重複的指令狹義上來講是「無限次數」,
但廣義上來講會被規則maxCommandChainLength所限制次數(如int值的最大上限一般),
比起連鎖指令方塊來說輸出量和資源消耗量相對地比較大,但可以控制執行次數和容易重編指令
在下面舉一個簡單的小例子:
首先執行以下的指令:
scoreboard objectives add times dummy scoreboard players set @p times 100 function main:summon |
1.創建times記分板且類別為dummy 2.讓最近玩家的times分數設定為100 3.執行function路徑:main:summon的指令 |
以下指令為main:summon的指令文本內容:
execute @p[score_times_min=1] ~ ~ ~ summon pig ~ ~ ~ scoreboard players remove @p times 1 function main:summon if @p[score_times_min=1] |
1.從最近玩家的times分數大於1者的身上生出一隻豬 2.減少1分最近玩家的times分數 3.如果最近玩家分數times大於1時,執行執行function路徑:main:summon的指令 |
他會一直持續循環main:summon中指令直到times分數從100被持續減1減至0時停止循環,
同時也使生成豬的指令被執行100次
超頻執行的指令輸出次數計算:
(在此先感謝貓狗喵的提醒)
超頻執行中因為被規則maxCommandChainLength限制次數的關係,
所以控制指令執行次數也是一個很重要的一環
先令規則maxCommandChainLength為300
執行一個function:test:fun,內含的指令如下:
say 1 say 1 function test:fun |
[(被重複執行的指令ex./say 1)/(function內總指令數+1)] * (maxCommandChainLength值)
而上方的指令「say 1」被執行次數即為:[2/(3+1)]* 300 = 150
(這會是用於被maxCommandChainLength限制次數時的執行重複性指令次數計算公式)
???那麼這個公式是如何推導出來的???
在這裡先舉一個例子,
假設有一個函數檔案為load:A,其中有10條可被執行的有效指令,
再設有另一個函數檔案為load:B,指令內容如下
say 1 function load:A |
則當使用/function load:B這條指令時,會從load:B執行出「13條」指令
》接著你一定會想問:2+10不是12嗎? 為什麼是13?
這是一項使用/function指令時所訂出的一個計算執行次數上的特殊規則:
1.從次數結果「由load:B執行了13條指令」可以知道一開始使用/function load:B指令並不計為
執行一次執行,而是由load:B裡的第一條指令才開始計次
2.如果函數檔案內有執行函數檔案的指令(/function)時,計算該/function指令的次數輸出為:
該函數檔案內的指令條數 + 1(執行/function時會額外輸出一次執行次數)
》以下是我針對第二點的特殊執行次數的分析(純屬個人意見,可能與事實不合): 執行function指令等同在叫出另一個檔案, 所以必須先回到計算機(電腦)去尋找到另一個檔案後開啟, 而尋找另一個檔案就視同於再執行一次命令, 因此使得指令執行次數被額外計算一次。 |
(如果我的分析有錯誤麻煩留言讓我知道,因為我也蠻想知道這個特殊的計算原理)