C++ 多个 Lua 状态

C++ multiple Lua states

我想为多个游戏对象使用同一个 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" 全局变量 (我想避免使用 tables 因为我必须在变量和函数调用之前使用 table 名称) (不知道有没有其他的解决办法。。。我是新手lua)

虽然在一个程序中可以有多个 Lua 状态很好,但请记住,每个状态都会占用一些内存。如果有充分的理由让您将两个环境完全分开,例如安全问题,或者可能同时需要也可能不需要完全不相关的子系统,那么这当然是值得的。

否则,拥有一个 Lua 状态通常更好 并且 更易于管理。


如果您需要在不同的逻辑块之间进行严格分离,Lua您是否涵盖了:

协程

如果您需要有多个逻辑块以便稍后暂停和恢复,您可以简单地将它们包装在协程中。这也可以很容易地从 C 中完成,并允许您完成大部分在不同 Lua 状态下可以做的事情。

环境

虽然这些在 Lua 5.2 之前和之后的工作方式有所不同,但基本思想是相同的:您可以更改 "global" 变量对代码的一部分可见的内容,甚至使用元表来访问其他数据或即时生成它。


有了这两个,你应该真的不需要在游戏中单独的 Lua 状态。该规则的一个例外显然是多线程;除非你使用某种锁定机制,否则你不应该有多个线程访问相同的 Lua 状态,所以每个线程有一个状态并设置一种方式让它们进行通信是有意义的C内