㈠ 我的世界這款游戲為什麼要用java的語言編寫
如果你真的想問為什麼要用 Java 來寫的話……我猜 MoJang 可能只會 Java 。
不久前我一個朋友就是這樣,只學了 Java 然後問我做游戲用哪個游戲引擎比較好,我告訴他所有游戲引擎都沒有用 Java 的,都是C++、C#、甚至有用 JavaScript 的,他一賭氣就說要自己從零開始開發一個游戲……
就很神奇,最初我是因為聽說「Java用於游戲編程更牛皮」才知道Java的存在,然而目前主流游戲基本沒有用Java的……
————————————————————
【我的世界優化差、電腦和手機卡的原因】
1、mod 插件系統為提高兼容性會降低優化。
眾所周知,性能優化和兼容程度成反比。而mod作為一類即插即用插件,必須要提高兼容性以適應這一操作。所以,絕大多數游戲的mod系統都會犧牲一部分性能,導致載入很多mod時會卡的不行,比如老滾和撿破爛。別問,問就游戲內置了就不卡了。
2、我的世界在游戲製作行業算是比較出了名的渲染優化差。
舉個例子,比如用其他游戲引擎(如unity)做一個你無法進入、只能站在外面官網的摩天大廈,在游戲中這個摩天大廈的模型可能只有外殼,而且如果是遠距離的話可能就會優化成面片(反正你也看不出來是不是立體的)然後通過處理材質來提高真實度,而且還可以設置成近距離外殼、遠距離自動優化成面片來全自動優化性能。
我的世界就不同了,假設這棟大樓高80米寬30米,放到我的世界裡就是 30 * 30 * 80 = 72000個方塊,然後每個方塊6個面,就是 7200 * 6 = 432000 個 1 X 1 的面片加貼圖同時渲染,去掉反向面至少也得有 266000個面片需要渲染。就算只有外殼,也是至少 29 * 4 * 78 + 30 * 30 * 2 = 10848 個方塊共計 65088 個面去反後至少 32544 個面需要渲染。而無論你在遠在近,這棟大樓均是由這些個方塊組成,不會自動優化(眾所周知我的世界唯一的自動優化只有視距和區塊系統2333)。
3、我的世界游戲引擎存在一些硬核問題,以及開發者的優化問題。
我之前開發我的世界mod的時候就發現很多東西確實比較腦殼痛。像什麼地形掃描,地形掃描,地形掃描,地形掃描。我的世界性能方面最頭疼的地方就是地形掃描,線性15米就等於是掃描15格,面積15*15就等於掃描了255個方塊,稍微大一點的區域簡直就是恐怖。
比如我如果要做實時的礦產勘探,假設半徑15格,模擬為玩家處於正中間、長寬高30的立方體區域。這個放在現實中也就是相當於高科技半徑15米的礦產雷達,但是就這15米就需要掃描27000個方塊,也就是說某一段代碼至少要重復27000次才能保證一次完整的掃描。
然後問題來了,如果1秒掃描一次的話就需要循環27000次,為降低性能開銷我當時就改為5秒一次,平均優化攤開變成了5秒150游戲幀分別掃描這27000個方塊,每一個游戲幀掃描180個方塊,這樣極大降低了性能,但是讓演算法更復雜。
而有一個簡單粗暴的優化方式,就是一口氣掃描完27000個方塊,然後等待5秒鍾,再進行下一次掃描。這樣做的話性能開銷比攤開優化要好一點,但是每一次掃描都會導致游戲卡頓一下,卡頓時間長度根據當時瞬間系統性能,我實測最慘的一次是連續5次卡頓半秒以上。
然後更大的問題是,很多 mod 開發者覺得自己的 mod 性能消耗很小,就都這樣簡單粗暴寫(別問,問就我的世界開發投入的精力與收入嚴重不對等導致優化和後期維護變成了純粹費力不討好)。單獨載入都沒啥大問題,但是萬一趕巧了運算掃描卡在同一瞬間……這個概率還真的不低。