簡體   English   中英

C ++ lua表映射到lua文件

[英]C++ lua table mapped to lua file

如何在C ++中將lua表映射到lua腳本,該腳本定義了表的屬性和方法,因此生成的lua文件如下所示:

Script.test = 5

function Script:Update()
end

因此,可以多次讀取此腳本,但每次在C ++中都應該獲得自己的唯一表。

這個想法是從C ++開始,我想調用每個唯一的Update()方法,並能夠讀取/設置其測試變量。

假設您正在制作一個視頻游戲,我告訴過您是否要制作這樣的腳本並將其附加到模型上,以便游戲將在每幀運行Update()方法,並且您定義的變量是該腳本/模型的局部變量。

這個答案只是為了詳細說明我在上面的評論。 實現您所描述的內容的一個簡單想法是,僅在腳本文件中創建該本地表,然后在最后返回該表。

local Script = {}

Script.test = 5
Script.foo = "bar"

function Script:Update()
end

return Script

這是將lua模塊放入其自己的名稱空間並避免全局范圍污染的常用方法。

您可以像下面這樣從堆棧中獲取並使用返回的Script表:

// load and execute your script
luaL_dofile(L, "script.lua");

// Run Script:Update()
lua_getfield(L, -1, "Update");
lua_pushvalue(L, -2);
lua_call(L, 1, 0);

您可以將上述代碼片段包裝到一個函數中,以使其易於根據需要調用多次。 您甚至可以通過將編譯的script.lua緩存在某個地方來提高效率,以避免每次調用此函數時都重新解析和重新創建包裝函數。 例如:

lua_getfield(L, LUA_REGISTRYINDEX, "cached_script");
if (lua_isnil(L, -1))
{
  luaL_loadfile(L, "script.lua");
  lua_pushvalue(L, -1);
  lua_setfield(L, LUA_REGISTRYINDEX, "cached_script");
}
lua_pcall(L, 0, 0, 0);
// etc.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM