如何将Lua变量直接映射到C++;变量 我正在用C++语言编写一个游戏引擎,用Lua来定义NPC。
我可以这样定义一个原型NPC:如何将Lua变量直接映射到C++;变量 我正在用C++语言编写一个游戏引擎,用Lua来定义NPC。,c++,variables,pointers,mapping,lua,C++,Variables,Pointers,Mapping,Lua,我可以这样定义一个原型NPC: orc = { name = "Generic Orc", health = 100 } function orc:onIdle() print("Orc idles...") end local myOrc = entitySpawn(orc) local curHealth = getEntityHealth(myOrc) setEntityHealth(myOrc, curHealth + 10) 然后使用entitySpawn
orc =
{
name = "Generic Orc",
health = 100
}
function orc:onIdle()
print("Orc idles...")
end
local myOrc = entitySpawn(orc)
local curHealth = getEntityHealth(myOrc)
setEntityHealth(myOrc, curHealth + 10)
然后使用entitySpawn(Orc)
生成一个“Orc”实例。这是一个C++函数,它从给定表中读取像健康和名称这样的值,用给定的值在C++中创建一个实体对象,并且为特定的NPC创建一个LUA表。
现在,我想在Lua中的
这可能吗?还是必须使用setter/getter函数?我已经查看了光用户数据,并在Lua中存储指向C++变量的指针,但不能赋值。
orc
是一个表,“health”
是一个元素
记住这一点,您可以更改表的
索引
和新索引
,以拥有自己的特定行为。将“真实”orc实例存储为一些私有元数据,然后使用它进行更新。这是可能的。我假设orc =
{
name = "Generic Orc",
health = 100
}
function orc:onIdle()
print("Orc idles...")
end
local myOrc = entitySpawn(orc)
local curHealth = getEntityHealth(myOrc)
setEntityHealth(myOrc, curHealth + 10)
为了使它更漂亮,我们可以使用元表来获得一些乐趣。首先,我们将为所有我们关心的属性放置访问器
entityGetters = {
health = getEntityHealth,
-- ...
}
entitySetters = {
health = setEntityHealth,
-- ...
}
然后,我们将创建一个使用这些函数来处理属性分配的
entityMetatable = {}
function entityMetatable:__index(key)
local getter = entityGetters[key]
if getter then
return getter(self)
else
return nil
end
end
function entityMetable:__newindex(key, value)
local setter = entitySetters[key]
if setter then
return setter(self, value)
end
end
现在您需要让entitySpawn
分配元表。您可以使用该函数执行此操作
int entitySpawn(lua_State* L)
{
// ...
// assuming that the returned table is on top of the stack
lua_getglobal(L, "entityMetatable");
lua_setmetatable(L, -2);
return 1;
}
现在你可以用很好的方式来写了:
local myOrc = entitySpawn(orc)
myOrc.health = myOrc.health + 10
请注意,这要求entitySpawn
返回的表未设置运行状况属性。如果是这样,则永远不会为该属性查询元表
C++可以创建<代码> >“ItgTigter”>代码>“ItTyTestStuts,和