例子:
player = {}
player.shape = {x = 0, y = 0, w = 50, h = 50}
Lua 中是否有一个函数可以告诉我 player.shape 在什么表中,所以我可以这样做:
shape_a = player.shape
some_function(shape_a) = player
例子:
player = {}
player.shape = {x = 0, y = 0, w = 50, h = 50}
Lua 中是否有一个函数可以告诉我 player.shape 在什么表中,所以我可以这样做:
shape_a = player.shape
some_function(shape_a) = player
为什么不在形状中存储对父表的引用?
player = {}
player.shape = {x = 0, y = 0, w = 50, h = 50, parent = player}
您可以使用如下元方法自动执行此操作:
local new_player = function()
return setmetatable(
{},
{
__newindex = function(t,k,v)
if k == "shape" then v.parent = t end
rawset(t,k,v)
end,
}
)
end
player = new_player()
player.shape = {x = 0, y = 0, w = 50, h = 50}
现在您可以通过调用从形状访问玩家shape.parent
。
Lua 中的值可以是任何地方。它可以同时出现在许多不同的地方。确实,您的代码清楚地表明了这一点:
shape_a = player.shape
该shape
表现在位于两个位置:全局表(在 name 下shape_a
)和player
表(在 name 下shape
)。
值可以在局部变量中,它们实际上没有名称(一旦编译器完成它们就不会。
你想要的通常是不可能的。
您可能在谈论 box2D 或 Chipmunk 物理。(我指的是 Nicol Bolas 回复中的评论)。
如果我没记错的话,他们都有办法做到这一点,在 Chipmunk 中(我猜你正在使用什么)有一个数据字段。
从花栗鼠手册:
cpDataPointer cpBodyGetUserData(const cpBody *body)
void cpBodySetUserData(cpBody *body, const cpDataPointer value)
用户数据指针。使用此指针从回调中获取对拥有此主体的游戏对象的引用。