1

在实际项目中,TEST_TABLE会包含很多TEST_TABLE_NESTED,每个都有自己的testVariable和一堆testScript. test函数 fromtestScript将在 C++ 代码中使用,并且TEST_TABLE_NESTED表也会从 C++ 代码中自动添加。

TEST_TABLE =
{
    TEST_TABLE_NESTED =
    {
        testVariable = 5, 

        testScript =
        {
            test = function()

                print(testVariable, "hello") --How to access 'testVariable'?

            end
        }
    }
}

编辑: 这是使用此脚本的实际场景:

GameObjectScriptTables =
{
    GameObject_1 = --Container of scripts corresponding to some gameObject
    {
        gameObjectOwner = actual_object_passed_from_c++, --This is an actual object passed from c++

        GameObjectScript_1 = --This is a script with update(dt) method which will be called somwhere in c++ code
        {
            update = function(dt)

                --here I want to use some data from gameObjectOwner like position or velocity

            end
        }
    }

    GameObject_2 =
    {
        gameObjectOwner = actual_object_passed_from_c++,

        GameObjectScript_1 =
        {
            update = function(dt)

                --here I want to use some data from gameObjectOwner like position or velocity

            end
        },

        GameObjectScript_2 =
        {
            update = function(dt)

                --here I want to use some data from gameObjectOwner like position or velocity

            end
        }
    }

    --And so on
}

想法是存在一些testVariable对象(从 C++ 传递),这些数据在TEST_TABLE_NESTED. 对我来说,上面的例子对于这个任务看起来很自然,但它打印nil而不是5. 那么如何在不打印完整路径的情况下访问testVariablefrom呢?testScriptTEST_TABLE.TEST_TABLE_NESTED.testVariable

4

2 回答 2

3

您要求类似“父”指针之类的东西,它告诉表 B 关于表 A,但它不存在。在内部,它们唯一的关联是 A 的值之一恰好是 B,但任何数量的表都可以包含 B 作为值。B的父母是谁?

如果你想让 B 知道 A,你需要告诉它。您可以添加一个额外的参数来update接收游戏所有者对象,或者update可以是包含游戏所有者作为绑定变量的闭包,依此类推。

于 2014-08-13T12:43:23.247 回答
-1

我通过gameObjectOwner为每个GameObjectScript_N. 但是我不知道它是否昂贵的解决方案。

于 2014-08-13T19:06:23.387 回答