我使用 LuaBind 在我的 C++ 应用程序中嵌入了 Lua。我需要有在多次运行中持续存在的变量,运行相同文件名的其他对象无法访问这些变量。
例如:假设我有一个名为NPC. AnNPC包含一个字符串,即它们运行的脚本的名称。创建an 时,NPC会创建一个名为 的变量Health。当一个NPC被击中时,他们会失去 5 点生命值。脚本在 Lua 中是这样的:
local health = 10
function onHit()
    health = health - 5
end
我遇到的问题是每个NPC运行这个脚本的人都没有自己的健康实例。例如,假设我创建NPC A,并从其生命值中减去 5。然后,我创建NPC B. 因为它会将生命值重置为 10,所以如果我告诉NPC A打印生命值,它会返回 10,即使它应该是 5。
如果我要为每个对象使用不同的 Lua 实例,那么它会以这种方式工作,但在这种情况下,我会一次得到数百个实例,我知道这不是一件好事。
有没有办法让变量在 Lua 中像这样工作?如果没有,是否有一种脚本语言可以有效地像这样工作?
作为参考,这是我正在测试的代码:
卢阿:
local health = 10;
function onHit()
    health = health - 5
    print_out(health)
end
C++:
class NPC
{
public:
   NPC(lua_State* inState);
   void onHit();
   const char* behavior;
   lua_State* luaState;  
};
NPC::NPC(lua_State* inState)
{
   luaState = inState;
   behavior = "testBehavior.lua";
   luaL_dofile(luaState, behavior);
}
void NPC::onHit()
{    
   luaL_loadfile(luaState, behavior); 
   luabind::call_function<int>(luaState, "onHit");
}
void print_out(int number) {
   cout << "Health : " << number << endl;
}
int main() 
{
   lua_State *myLuaState = luaL_newstate();
   luabind::open(myLuaState);
   luabind::module(myLuaState) [
      luabind::def("print_out", print_out)
   ];
   NPC test(myLuaState);
   NPC test2(myLuaState);
   test.onHit();
   test2.onHit();
   test.onHit();
   lua_close(myLuaState);
}