[英]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.