C++的多个Lua状态

C++ multiple Lua states

本文关键字:Lua 状态 C++      更新时间:2023-10-16

我想对多个游戏对象使用相同的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的新手)

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

否则,通常更易于管理的是具有单个Lua状态。


如果您需要不同逻辑块之间的强分离,Lua会为您提供:

推论

如果您需要有几个逻辑块,以便稍后暂停并继续,您可以简单地将它们封装在协同程序中。这也可以很容易地从C中完成,并允许您对不同的Lua状态执行大部分可以执行的操作。

环境

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


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