C ++多个Lua状态

时间:2019-02-05 19:42:37

标签: c++ lua game-engine

我想对多个游戏对象使用同一个lua文件

lua文件:

function onUpdate()
    if Input.isKeyDown(Keys.d) then
        actor.x = actor.x + 0.1
    end

    if Input.isKeyDown(Keys.a) then
        actor.x = actor.x - 0.1
    end

    if Input.isKeyDown(Keys.w) then
        actor.y = actor.y + 0.1
    end

    if Input.isKeyDown(Keys.s) then
        actor.y = actor.y - 0.1
    end
end

问题

对每个对象有一个Lua状态还是一个好习惯,还是应该在游戏对象调用脚本之前对同一文件使用相同的状态并更新“ actor”全局变量? (我想避免使用表,因为在变量和函数调用之前我必须使用表名) (我不知道是否还有其他解决方案……我是lua的新手)

1 个答案:

答案 0 :(得分:0)

虽然可以在一个程序中包含多个Lua状态是一件很不错的事情,但是请记住,每个状态确实占用一些内存。如果有充分的理由将两个环境完全分开,例如安全隐患,或者可能同时需要或可能不需要的完全不相关的子系统,那么这肯定是值得的。

否则,具有单个Lua状态通常更好[em>并且更易于管理。


如果您需要在逻辑的不同块之间进行强烈隔离,Lua可以满足您的要求:

协程

如果您需要几个逻辑块要在以后暂停和恢复,则只需将它们包装在协程中即可。这也可以很容易地用C来完成,并允许您执行大多数使用不同Lua状态的操作。

环境

虽然在Lua 5.2之前和之后它们的工作方式有所不同,但基本思想是相同的:您可以更改代码部分可见的“全局”变量,即使使用元表访问其他数据或在其上生成它也是如此。飞。


有了这两个,您真的应该没有太多需要在游戏中使用单独的Lua状态。该规则的一个例外显然是多线程。除非使用某种锁定机制,否则不应有多个线程可以访问相同的Lua状态,因此每个线程只有一个状态并为它们在C内部进行通信提供了一种方法。 / p>