C++多Lua状态

我想要为多个游戏对象使用相同的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”全局变量 (我想避免使用表,因为在变量和函数调用之前我必须使用表名称) (我不知道是否有其他解决方案...我是新手)

点赞
用户4984564
用户4984564

虽然你可以在一个程序中拥有许多 Lua 状态,但要记住每个状态都会占用一些内存。如果你有足够的理由需要完全分开两个环境,比如安全方面的考虑或者完全不相关的子系统这些或许需要同时使用或不需要同时使用,那么它肯定是值得的。

否则,通常更好和更可管理的做法是拥有一个单独的 Lua 状态。


如果你需要在不同逻辑块之间进行强制分离,Lua 可以提供以下两个功能:

协程

如果你需要在以后暂停并恢复多个逻辑块,你可以将它们简单地封装在协程中。这也可以轻松地从 C 中实现,允许你做多个 Lua 状态可以做的大部分事情。

环境

虽然在 Lua 5.2 之前和之后的处理方式略有不同,但基本思路是相同的:你可以更改哪些“全局”变量可以在你的代码段中可见,甚至使用元表访问其他数据或在运行时生成数据。


有了这两个功能,你实际上不需要在游戏中拥有太多独立的 Lua 状态。唯一的一个例外是多线程;除非你使用某种锁定机制,否则不应该让多个线程访问同一个 Lua 状态,因此为每个线程设置一个状态并设置一种方法来实现它们在 C 中的通信是有意义的。

2019-02-06 08:30:54