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

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

 更新時(shí)間:2014年09月22日 12:00:12   投稿:hebedich  
在游戲腳本開發(fā)中,我們往往會(huì)發(fā)現(xiàn)腳本量非常大,而且我們經(jīng)常會(huì)在一些核心腳本文件中定義常用的功能函數(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)用另外一個(gè)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對(duì)test1.lua文件進(jìn)行加載并編譯運(yùn)行,這部操作會(huì)將test1.lua文件中的函數(shù)和變量壓入全局的虛擬棧中,這樣就可以實(shí)現(xiàn)對(duì)GetRandMax()調(diào)用。但是這里有個(gè)問題:dofile函數(shù)接受的是需要引用的外部腳本的路徑,如果多次調(diào)用會(huì)不勝其煩,而且效率不高。可能有人誰說,那我們直接把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的路徑問題,每次都要傳入文件的絕對(duì)路徑,如果路徑不正確,無法正常執(zhí)行,這也是個(gè)很煩的事。

復(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í)行路徑拼接成絕對(duì)路徑,這樣就省了不少事;)

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個(gè)代碼片段分享

    Lua操作字符串的5個(gè)代碼片段分享

    這篇文章主要介紹了Lua操作字符串的5個(gè)代碼片段分享,本文講解了匹配字符串中的數(shù)字、字母和下劃線、替換字符串中的指定字符、判斷字符串中是否有目標(biāo)字串、從文件的絕對(duì)路徑中獲取到文件名等內(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)怪,往下看就明白了)和局部變量聲明(這個(gè)好像也是傳統(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個(gè)關(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)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    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)遞歸刪除一個(gè)文件夾

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

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

    LUA中的閉包(closure)淺析

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

最新評(píng)論

江源县| 合肥市| 历史| 黄浦区| 汾西县| 清原| 梅河口市| 湘潭市| 泰和县| 长武县| 上林县| 永兴县| 金平| 白银市| 弥勒县| 鸡泽县| 宝清县| 高青县| 霍邱县| 灵山县| 大港区| 右玉县| 广宗县| 曲松县| 独山县| 历史| 龙泉市| 慈溪市| 江源县| 渝北区| 南澳县| 大名县| 江北区| 棋牌| 钦州市| 溧水县| 紫金县| 苍梧县| 靖州| 融水| 湛江市|