gpt4 book ai didi

c - 使用其 C API 恢复 Lua 脚本

转载 作者:行者123 更新时间:2023-12-05 07:03:03 27 4
gpt4 key购买 nike

使用 Lua C API 5.3,我想暂停一个脚本以便稍后能够恢复它(可能在从磁盘加载游戏状态之后)。我不相信可以安全地使用协程/屈服,因为我在脚本的开头构建局部变量的状态,并且我希望此解决方案在应用程序完全重新启动后起作用。从本质上讲,维护原始的 Lua 状态对象是不现实的。

示例脚本:

dothisfirst()
wait(10 seconds)
dothatlast()

可能的解决方案 #1:将整个脚本包装在一个协程中;但是,必须以某种独特的方式保存整个 Lua 状态。如果脚本希望在以后从保存的游戏状态或其他内容恢复,这就没有用了。

可能的解决方案 #2:我考虑过操纵 Lua 脚本,因此任何脚本暂停前后的部分变成一个可以多次执行的 Lua 脚本,在第一次运行时它执行第一部分,第二次等运行将等待指定的时间,最后一次运行将完成最后一部分。全局变量将用于指示机器的状态。

可能的解决方案 #3:不使用 luaL_dostring(),我可以预处理脚本,手动处理条件/循环,并手动执行各行。这似乎是最简单和最安全的方法。

最重要的是确保解决方案适用于嵌套循环。如前所述,解决方案需要能够在应用程序重新启动后恢复;因为可以保存和重新加载状态。

我想我希望从社区获得反馈,了解是否有其他解决方案,或者社区是否对上述任何解决方案有任何建议。

谢谢!

最佳答案

您还应该考虑使用 lua_sethook .您可以分配一个“ Hook 函数”,每个 count 字节码指令都会调用它。当你想暂停脚本时,你的钩子(Hook)函数可以延迟返回。您将需要维护 Hook 函数的堆栈,以便它稍后返回,这意味着您已将问题从 Lua 协程转移到 C 协程或线程。

关于c - 使用其 C API 恢复 Lua 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63365401/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com