示例:
player = {}
player.shape = {x = 0, y = 0, w = 50, h = 50}
Lua中是否有一个函数可以告诉我player.shape表是什么,所以我可以这样做:
shape_a = player.shape
some_function(shape_a) = player
答案 0 :(得分:4)
为什么不在形状中存储对父表的引用?
player = {}
player.shape = {x = 0, y = 0, w = 50, h = 50, parent = player}
你可以使用这样的metamethods自动执行此操作:
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
来访问该形状的播放器。
答案 1 :(得分:1)
Lua中的值可以任何地方。它可以同时在许多不同的地方。实际上,您的代码清楚地显示了它:
shape_a = player.shape
shape
表现在分为两个位置:全局表(名称为shape_a
)和player
表(名称为shape
)。
值可以是局部变量,它们实际上没有名称(编译器通过它们时没有。
您通常无法做到。
答案 2 :(得分:0)
你可能在谈论box2D或者花栗鼠物理。 (我在提到Nicol Bolas回复中的评论)。
他们两个都有办法做到这一点,如果我记得很清楚,在Chipmunk(这是我猜你正在使用的)有一个数据字段。
来自花栗鼠手册:
cpDataPointer cpBodyGetUserData(const cpBody *body)
void cpBodySetUserData(cpBody *body, const cpDataPointer value)
用户数据指针。使用此指针获取游戏的引用 从回调中拥有此主体的对象。