最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2014年09月22日 12:00:12   投稿:hebedich  
在游戲腳本開發(fā)中,我們往往會發(fā)現(xiàn)腳本量非常大,而且我們經(jīng)常會在一些核心腳本文件中定義常用的功能函數(shù),但是Lua腳本沒有提供include關(guān)鍵詞,那又是怎樣調(diào)用外部函數(shù)的呢?如何實(shí)現(xiàn)腳本的Include功能?

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")   --加載并編譯運(yùn)行腳本 
  local nRandMax = GetRandMax();  
  local nRand = math.random(nRandMax); 
  print("nRand =", nRand) 
  return 1; 
end

看上去是這樣的,非常簡單,通過dofile對test1.lua文件進(jìn)行加載并編譯運(yùn)行,這部操作會將test1.lua文件中的函數(shù)和變量壓入全局的虛擬棧中,這樣就可以實(shí)現(xiàn)對GetRandMax()調(diào)用。但是這里有個問題:dofile函數(shù)接受的是需要引用的外部腳本的路徑,如果多次調(diào)用會不勝其煩,而且效率不高??赡苡腥苏l說,那我們直接把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)應(yīng)用,執(zhí)行后堆棧溢出;

復(fù)制代碼 代碼如下:

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

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

復(fù)制代碼 代碼如下:

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

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

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

在Include函數(shù)中使用set集合避免重復(fù)包含的問題,獲取當(dāng)前的執(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

相關(guān)文章

  • Lua操作字符串的5個代碼片段分享

    Lua操作字符串的5個代碼片段分享

    這篇文章主要介紹了Lua操作字符串的5個代碼片段分享,本文講解了匹配字符串中的數(shù)字、字母和下劃線、替換字符串中的指定字符、判斷字符串中是否有目標(biāo)字串、從文件的絕對路徑中獲取到文件名等內(nèi)容,需要的朋友可以參考下
    2015-04-04
  • 淺談Lua語句

    淺談Lua語句

    Lua支持大多數(shù)傳統(tǒng)的語句,跟C語言和Pascal差不多。傳統(tǒng)的語句包括:賦值,控制結(jié)構(gòu),流程調(diào)用等。Lua還支持一些不太傳統(tǒng)的語句,例如多賦值(聽起來有點(diǎn)怪,往下看就明白了)和局部變量聲明(這個好像也是傳統(tǒng)的吧)。
    2015-05-05
  • Lua實(shí)現(xiàn)split函數(shù)

    Lua實(shí)現(xiàn)split函數(shù)

    這篇文章主要介紹了Lua實(shí)現(xiàn)split函數(shù),lua中沒有split分割字條串函數(shù),本文使用自定義函數(shù)實(shí)現(xiàn),需要的朋友可以參考下
    2015-04-04
  • Lua中的全局變量、非全局變量總結(jié)

    Lua中的全局變量、非全局變量總結(jié)

    這篇文章主要介紹了Lua中的全局變量、非全局變量總結(jié),全局變量可稱之為Lua環(huán)境變量,需要的朋友可以參考下
    2014-09-09
  • Lua中調(diào)用C++函數(shù)實(shí)例

    Lua中調(diào)用C++函數(shù)實(shí)例

    這篇文章主要介紹了Lua中調(diào)用C++函數(shù)實(shí)例,本文是Lua和C++通信系列文章的最后一篇,需要的朋友可以參考下
    2014-09-09
  • Ruby元編程技術(shù)詳解(Ruby Metaprogramming techniques)

    Ruby元編程技術(shù)詳解(Ruby Metaprogramming techniques)

    這篇文章主要介紹了Ruby元編程技術(shù)詳解(Ruby Metaprogramming techniques),本文講解了11個關(guān)于元編程的技術(shù)和技巧,需要的朋友可以參考下
    2015-04-04
  • Lua協(xié)同程序coroutine的簡介及優(yōu)缺點(diǎn)

    Lua協(xié)同程序coroutine的簡介及優(yōu)缺點(diǎn)

    今天小編就為大家分享一篇關(guān)于Lua協(xié)同程序coroutine的簡介及優(yōu)缺點(diǎn),小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-10-10
  • 安裝Nginx+Lua開發(fā)環(huán)境

    安裝Nginx+Lua開發(fā)環(huán)境

    本文主要詳細(xì)介紹了安裝Nginx+Lua開發(fā)環(huán)境的過程以及nginx+lua的配置,十分的詳盡,這里推薦給小伙伴們。
    2015-02-02
  • Lua中實(shí)現(xiàn)遞歸刪除一個文件夾

    Lua中實(shí)現(xiàn)遞歸刪除一個文件夾

    這篇文章主要介紹了Lua中實(shí)現(xiàn)遞歸刪除一個文件夾,本文給出了使用C++和使用純LUA兩種方式實(shí)現(xiàn),需要的朋友可以參考下
    2015-01-01
  • LUA中的閉包(closure)淺析

    LUA中的閉包(closure)淺析

    這篇文章主要介紹了LUA中的閉包(closure)淺析,本文給出實(shí)例講解LUA中的閉包,需要的朋友可以參考下
    2015-02-02

最新評論

张掖市| 广昌县| 松潘县| 巧家县| 鄂伦春自治旗| 黑水县| 孝昌县| 秭归县| 万宁市| 增城市| 龙泉市| 闽清县| 密山市| 宣武区| 东城区| 临高县| 新民市| 黔江区| 乌兰浩特市| 揭阳市| 阳信县| 鄂尔多斯市| 高密市| 新晃| 安仁县| 开鲁县| 常德市| 乌什县| 芮城县| 射阳县| 郓城县| 五大连池市| 施秉县| 扎囊县| 兰溪市| 宁蒗| 鲁山县| 铅山县| 绥棱县| 庄河市| 克拉玛依市|