2

Luaでは、オブジェクト間に複数の子を持つことができるオブジェクト間のツリー関係構造がありますが、親オブジェクトは1つだけです。

obj---obj1---obj2---objd3---obj4---obj5---obj6

直接の親obj5だけでなく、obj6の「遠い」親を知りたい場合、どうすればそれを達成できますか?現在のオブジェクトの2つ以上上のレベルにある親のリストが必要であり、使用しているAPIにはobj.parentプロパティしかありません。

擬似コードも私を正しい方向に導くのに役立ちます。

4

2 に答える 2

3
obj.parent               -- immediate parent (obj5)
obj.parent.parent        -- parent's parent (obj4)
obj.parent.parent.parent -- parent's parent's parent (obj3)

などなど?

存在しない親を参照しようとするのを避けたい場合は、次のようなことができると思います。

function getAncestor(obj, depth)
   if not obj.parent then
      return nil
   elseif depth > 1 then
      return getAncestor(obj.parent, depth-1)
   end
   return obj.parent
end


-- get parent
obj = getAncestor(obj6)

-- get great great grandparent
obj = getAncestor(obj6, 3)
于 2012-06-21T20:48:22.710 に答える
2

さて、あなたのAPIがサポートしているなら、あなた.parentは次のようなことをすることができませんか?私はLuaに錆びていますが、これが出発点になるはずです。

local function GetAncestors(child)

    local ancestors = {};

    if child.parent then
        local i = 0;
        ancestors[0] = child.parent;
        while ancestors[i].parent do
            ancestors[i + 1] = ancestors[i].parent;
            i = i + 1;
        end
    end

    return ancestors;

end
于 2012-06-21T19:28:21.137 に答える