天天看點

Lua 腳本怎麼樣調用外部腳本

在遊戲腳本開發中,我們往往會發現腳本量非常大,而且我們經常會在一些核心腳本檔案中定義常用的功能函數,但是lua腳本沒有提供include關鍵詞,那又是怎樣調用外部函數的呢?如何實作腳本的include功能?

test.lua腳本定義main函數如下:

現在我想在test.lua腳本中調用另外一個test1.lua腳本檔案中的getrandmax(),通常的做法是這樣的:

看上去是這樣的,非常簡單,通過dofile對test1.lua檔案進行加載并編譯運作,這部操作會将test1.lua檔案中的函數和變量壓入全局的虛拟棧中,這樣就可以實作對getrandmax()調用。但是這裡有個問題:dofile函數接受的是需要引用的外部腳本的路徑,如果多次調用會不勝其煩,而且效率不高。可能有人誰說,那我們直接把dofile作為全局函數執行,就像這樣:

這樣做是可以的,但是仍然有些問題:

那怎樣做才更好呢?既然dofile有這些的問題,我們就把這些問題解決。在c/c++中實作include腳本接口函數,在腳本中作為全局函數調用,實作外部腳本檔案包含功能。

在include函數中使用set集合避免重複包含的問題,擷取目前的執行路徑拼接成絕對路徑,這樣就省了不少事;)

繼續閱讀