欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間: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)用另外一個(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對test1.lua文件進(jìn)行加載并編譯運(yùn)行,這部操作會將test1.lua文件中的函數(shù)和變量壓入全局的虛擬棧中,這樣就可以實(shí)現(xiàn)對GetRandMax()調(diào)用。但是這里有個(gè)問題: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)應(yīng)用,執(zhí)行后堆棧溢出;

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

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

    2,dofile的路徑問題,每次都要傳入文件的絕對路徑,如果路徑不正確,無法正常執(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í)行路徑拼接成絕對路徑,這樣就省了不少事;)

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中的metatable詳解

    Lua中的metatable詳解

    這篇文章主要介紹了Lua中的metatable詳解,本文詳細(xì)講解了metatable的作用、定義操作符行為、為 Lua 函數(shù)庫提供支持等內(nèi)容,需要的朋友可以參考下
    2014-10-10
  • lua獲取未來某時(shí)間點(diǎn)的時(shí)間戳解決方案

    lua獲取未來某時(shí)間點(diǎn)的時(shí)間戳解決方案

    這篇文章主要介紹了lua獲取未來某時(shí)間點(diǎn)的時(shí)間戳解決方案,需要的朋友可以參考下
    2014-12-12
  • C調(diào)用lua函數(shù)需要考慮的問題

    C調(diào)用lua函數(shù)需要考慮的問題

    這篇文章主要介紹了C調(diào)用lua函數(shù)需要考慮的問題,本文羅列了4條需要注意的問題,并給出了調(diào)用實(shí)例,需要的朋友可以參考下
    2015-04-04
  • OpenResty中正則模式匹配的2種方法詳解

    OpenResty中正則模式匹配的2種方法詳解

    在 OpenResty 中,同時(shí)存在兩套正則表達(dá)式規(guī)范:Lua 語言的規(guī)范和 Nginx 的規(guī)范,下面這篇文章主要給大家介紹了關(guān)于OpenResty中正則模式匹配的2種方法,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下。
    2018-04-04
  • Lua教程(四):函數(shù)詳解

    Lua教程(四):函數(shù)詳解

    這篇文章主要介紹了Lua教程(四):函數(shù)詳解,本文講解了多重返回值、變長參數(shù)、具名實(shí)參、閉合函數(shù)、匿名函數(shù)、非全局函數(shù)等內(nèi)容,需要的朋友可以參考下
    2015-04-04
  • Lua多行注釋和取消多行注釋的方法

    Lua多行注釋和取消多行注釋的方法

    這篇文章主要介紹了Lua多行注釋和取消多行注釋的方法,本文分別給出代碼示例,請注意細(xì)節(jié)~,需要的朋友可以參考下
    2015-06-06
  • Lua數(shù)據(jù)類型介紹

    Lua數(shù)據(jù)類型介紹

    這篇文章主要介紹了Lua數(shù)據(jù)類型介紹,本文講解了Lua中的nil(空)、boolean(布爾)、number(數(shù)字)、string(字符串)、table(表)、function(函數(shù))、thread(線程)、userdata(自定義類型)等數(shù)據(jù)類型,需要的朋友可以參考下
    2014-12-12
  • Lua教程(十七):C API簡介

    Lua教程(十七):C API簡介

    這篇文章主要介紹了Lua教程(十七):C API簡介,本文講解了基礎(chǔ)知識、棧、C API中的錯(cuò)誤處理、Lua調(diào)用C程序、C程序調(diào)用Lua代碼的錯(cuò)誤處理等內(nèi)容,需要的朋友可以參考下
    2015-04-04
  • Lua性能優(yōu)化技巧(一):前言

    Lua性能優(yōu)化技巧(一):前言

    這篇文章主要介紹了Lua性能優(yōu)化技巧(一):前言,本文講解了2條優(yōu)化原則,本文是系列文章的第一篇,需要的朋友可以參考下
    2015-04-04
  • Lua中string.len()使用指南

    Lua中string.len()使用指南

    Lua 字符串庫中的所有函數(shù)都導(dǎo)出在模塊 string 中,今天我們先來看看string.len()的使用,有需要的小伙伴可以參考下
    2016-08-08

最新評論