麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 開發(fā) > 綜合 > 正文

Lua腳本調(diào)用外部腳本

2024-07-21 23:04:05
字體:
供稿:網(wǎng)友

test.lua腳本定義main函數(shù)如下:

function main(szName, num1, num2)     print("main()", szName, num1, num2);   local nRandMax = 10000;    local nRand = math.random(nRandMax);   print("nRand =", nRand)   return 1; end

現(xiàn)在我想在test.lua腳本中調(diào)用另外一個test1.lua腳本文件中的GetRandMax(),通常的做法是這樣的:

function main(szName, num1, num2)     print("main()", szName, num1, num2);   dofile("test1.lua")   --加載并編譯運行腳本   local nRandMax = GetRandMax();    local nRand = math.random(nRandMax);   print("nRand =", nRand)   return 1; end

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

dofile("test1.lua") dofile("test2.lua") dofile("test3.lua")  function main(szName, num1, num2)     print("main()", szName, num1, num2);   local nRandMax = GetRandMax();  --調(diào)用test1.lua中的函數(shù)   local nRand = math.random(nRandMax);   print("nRand =", nRand)   return 1; end

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

    1,如果test.lua文件dofile(test1.lua),而test1.lua文件dofile(test.lua),怎么辦!出現(xiàn)循環(huán)應用,執(zhí)行后堆棧溢出;

 

復制代碼 代碼如下:

test.lua:5: too many C levels (limit is 200) in function at line 5 near '"main()"'

    2,dofile的路徑問題,每次都要傳入文件的絕對路徑,如果路徑不正確,無法正常執(zhí)行,這也是個很煩的事。

 

 

復制代碼 代碼如下:

cannot open /script/test.lua: No such file or directory

那怎樣做才更好呢?既然dofile有這些的問題,我們就把這些問題解決。在C/C++中實現(xiàn)Include腳本接口函數(shù),在腳本中作為全局函數(shù)調(diào)用,實現(xiàn)外部腳本文件包含功能。

 

//腳本接口 TLua_Funcs g_GameFunc[] = {   { "Include",        LuaInclude },   { "ReloadAllScript",    LuaReloadAllScript},   { "SayHello",       LuaSayHello },   { "StopGame",       LuaStopGame }, };

在Include函數(shù)中使用set集合避免重復包含的問題,獲取當前的執(zhí)行路徑拼接成絕對路徑,這樣就省了不少事;)

Include("//script//test1.lua") --Include腳本接口  function main(szName, num1, num2)     print("main()", szName, num1, num2);   local nRandMax = GetRandMax();  --調(diào)用test1.lua中的函數(shù)   local nRand = math.random(nRandMax);   print("nRand =", nRand)   return 1; end

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 永久免费不卡在线观看黄网站 | 国产成人高清在线观看 | 羞羞的视频免费在线观看 | 一级电影在线免费观看 | 日韩色视频在线观看 | 亚洲成人免费网站 | 黄色大片在线免费观看 | 久久亚洲春色中文字幕久久 | 中文字幕在线观看精品 | 高清国产免费 | 久久精品在线免费观看 | 欧美性受xxx黑人xyx性爽 | 久久色伦理资源站 | 91精品国产91 | 国产精品刺激对白麻豆99 | 四虎久草 | 情侣啪啪网站 | 国产免费一级大片 | 欧美a黄 | 黄色片网站免费观看 | 欧美 国产 亚洲 卡通 综合 | 国产精品一区在线观看 | xxxxxx打针视频vk | 亚洲午夜影院在线观看 | 999精品久久久 | 91性视频 | 国产在线一区二区三区 | 久久国产精品二国产精品 | 曰韩毛片 | 羞羞答答xxdd在线播放 | 久久最新视频 | 中文区中文字幕免费看 | 99国内精品视频 | 一级网站 | 草莓视频久久 | 在线观看免费视频麻豆 | 一级电影免费 | 92看片淫黄大片欧美看国产片 | 伦一区二区三区中文字幕v亚洲 | 狠狠操视频网站 | 久久精品视频2 |