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"全局变量(我想避免使用表,因为我必须在变量和函数调用之前使用表名)(我不知道是否还有其他解决方案……我是lua的新手)
虽然在一个程序中可以有许多Lua状态是很好的,但请记住,每个状态都会占用一些内存。如果有充分的理由让两个环境完全分开,比如安全隐患,或者同时需要或不需要的完全不相关的子系统,那么这当然是值得的
否则,通常和更易于管理的是具有单个Lua状态。
如果您需要不同逻辑块之间的强分离,Lua会为您提供:
推论
如果您需要有几个逻辑块,以便稍后暂停并继续,您可以简单地将它们封装在协同程序中。这也可以很容易地从C中完成,并允许您对不同的Lua状态执行大部分可以执行的操作。
环境
虽然这些在Lua 5.2之前和之后的工作方式有所不同,但基本思想是相同的:您可以更改代码部分可见的"全局"变量,甚至可以使用元表访问其他数据或动态生成数据。
有了这两个,你真的不需要在游戏中使用单独的Lua状态。这个规则的一个例外显然是多线程;除非使用某种锁定机制,否则不应该有多个线程访问相同的Lua状态,因此每个线程有一个状态并为它们设置一种从C.中通信的方式是有意义的
相关文章:
- Constexpr替代了新的放置方式,可以让内存中的对象保持未初始化状态
- 我不断收到 [错误] ID 返回 1 退出状态错误,但看不到问题所在
- OSX MetalKit CVMetalTextureCacheCreateTextureFromImage失败,状态:
- C++Lua用户数据扰乱了Mathfu浮点值
- std::future_error:无关联状态
- 如何避免LED在循环状态变化中闪烁?
- boost 是否有按特殊类型值编码状态"compact optional"?
- 使用 LuaBridge 或 Lua 将对象传递给 Lua 函数C++
- 为什么系统函数总是在C++中返回已转移的退出状态?
- C++ 中的编译错误:未定义对"主"的引用 collect2:错误:ld 返回 1 个退出状态
- 当可输入框在窗口中处于活动状态时获得通知的任何方法
- 检查两个节点在子节点上是否具有相同状态的更优雅的方法
- 通过require在不同的Lua状态之间共享全局变量
- 创建 Lua 状态时的访问冲突
- 从指针访问 Kaguya Lua 状态
- C++的多个Lua状态
- 在提升shared_ptr中存储多个 Lua 状态
- 读取C++#定义为Lua状态
- 将表从一个lua状态传递到另一个lua状态
- 如何确保发生错误后(luabind)lua 状态良好