【群星Stellaris】20200903開(kāi)發(fā)日志#182

“大家好!我是《群星》內(nèi)容設(shè)計(jì)師之一的Caligula,我基于敘述性寫作和腳本執(zhí)行各種任務(wù)-“腳本”是我們做與編程類似的工作的術(shù)語(yǔ),換句話說(shuō),我做的是Modder們的工作(盡管我有一個(gè)很大的優(yōu)勢(shì),那就是能夠窺探源代碼并在需要時(shí)進(jìn)行更改)。每一個(gè)內(nèi)容設(shè)計(jì)師都有自己的定位,而我的觀點(diǎn)是,當(dāng)一個(gè)特別復(fù)雜的系統(tǒng)需要編寫腳本時(shí)(或者,更常見(jiàn)的情況是會(huì)給我?guī)?lái)麻煩的“噩夢(mèng)”——天堂之戰(zhàn)),我就進(jìn)入了突破口。

現(xiàn)在,我們將在接下來(lái)的幾周或幾個(gè)月內(nèi)展示很多激動(dòng)人心的新內(nèi)容,但是今天,受上一篇開(kāi)發(fā)人員日記之后提出的一些問(wèn)題的啟發(fā),我將為modder們和有“野心”的modder們寫一篇關(guān)于腳本技術(shù)方面的文章,特別是關(guān)注什么會(huì)導(dǎo)致性能問(wèn)題以及如何避免編寫糟糕的腳本。

群星腳本語(yǔ)言是一個(gè)非常強(qiáng)大的工具,可以用它完成很多工作,但首先要注意一點(diǎn):僅僅因?yàn)槟臣率强赡艿模⒉灰馕吨蛻?yīng)該去做。我再怎么強(qiáng)調(diào)也不為過(guò),因?yàn)椋ㄒ晕业慕?jīng)驗(yàn)來(lái)看)這種態(tài)度幾乎肯定會(huì)導(dǎo)致性能問(wèn)題和無(wú)法閱讀的腳本,六個(gè)月后,當(dāng)你意識(shí)到它的某些部分被破壞時(shí),你將無(wú)法解決這些問(wèn)題。盡管需要記住的是,按照定義,用代碼執(zhí)行某些操作會(huì)更快:在代碼中,您可以檢查單個(gè)功能并完成該功能,但是如果希望通過(guò)腳本對(duì)其進(jìn)行訪問(wèn),則在檢查功能之前,它必須經(jīng)過(guò)的必要功能很少(將腳本行轉(zhuǎn)換為代碼命令,檢查腳本是否在正確的范圍內(nèi)使用,等等)——因此,為什么要對(duì)某些東西進(jìn)行硬編碼,以及為什么對(duì)問(wèn)題采用過(guò)分棘手的解決方案卻最終變得非常糟糕。 因此,要考慮的第一個(gè)問(wèn)題是,我真的應(yīng)該這樣做嗎?
04

是什么導(dǎo)致性能問(wèn)題?
每次運(yùn)行檢查或執(zhí)行某個(gè)效果時(shí),都會(huì)占用計(jì)算機(jī)極少量的處理能力。除了一些應(yīng)該謹(jǐn)慎使用的例外情況(稍后我將討論這些例外情況),這是完全可以的。當(dāng)檢查經(jīng)常在許多對(duì)象上重復(fù)時(shí),問(wèn)題就會(huì)發(fā)生。實(shí)際上,這通常是人口的原因,在銀河系中的所有行星上運(yùn)行某些東西也是一個(gè)很糟糕的主意。

第一步,盡可能控制腳本的運(yùn)行時(shí)間。 最好的方法是設(shè)置觸發(fā)事件的位置,并在可能的情況下使用on_actions(或觸發(fā)決策等事件),而不是平均時(shí)間發(fā)生,甚至更糟的是,將事件設(shè)置為每天嘗試觸發(fā)。如果需要一定程度的隨機(jī)性,則還可以通過(guò)例如每年一次的脈沖觸發(fā)隱藏事件,然后隨機(jī)延遲觸發(fā)所需的實(shí)際事件(例如,查看事件action.220)。 ”
更多請(qǐng)瀏覽
https://forum.paradoxplaza.com/forum/threads/stellaris-dev-diary-182-the-perils-of-scripting-and-how-to-avoid-them.1416409/