LuaBindを使用してC++アプリケーションにLuaを埋め込みました。同じファイル名を実行する他のオブジェクトからアクセスできない、複数の実行にわたって持続する変数が必要です。
例:。というクラスがあるとしNPC
ます。は文字列を保持します。これNPC
は、実行するスクリプトの名前です。がNPC
作成されると、と呼ばれる変数が作成されHealth
ます。ヒットするNPC
と、体力が5減少します。Luaのスクリプトは次のようになります。
local health = 10
function onHit()
health = health - 5
end
私がこれに関して抱えている問題は、このスクリプトを実行するすべてNPC
のものが、独自のヘルスインスタンスを持っていないということです。たとえば、を作成しNPC A
、そのヘルスから5を引いたとします。次に、を作成しますNPC B
。ヘルスを10にリセットするため、NPC A
ヘルスを印刷するように指示すると、5であるはずなのに、10に戻ります。
オブジェクトごとに異なるLuaインスタンスを使用すると、そのように機能しますが、その場合、一度に数百のインスタンスが作成されることになります。これは良いことではないことを理解しています。
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);
}