我正在构建一个系统插件。我的插件的update()
方法偶尔被系统调用。
在我的插件的update()
方法中,我正在修改系统状态,但系统状态在系统有机会之前不会更新(这发生在{{1}的调用之间方法)。
所以每当我进行系统更新方法时,我都必须从update
一直返回,让它返回,然后重新输入,然后我将不得不尝试回来到了我的位置。我一直在考虑一种更聪明的方法,即通过保存调用框架等。然后在返回时加载该调用帧。
但是我没有开始自己实现这个,而是在考虑是否已经有办法做到这一点。我正在编写的插件是在Lua中,通过用于C#的NLua库。
如果需要,我可以访问C#环境!
我有一个想法,我需要类似延续的东西吗?
我喜欢的例子;
update()
答案 0 :(得分:1)
我确实在寻找协同程序,它们似乎完全符合我的要求。
我最终将update()
can包装在一个方法中,以作为协程运行实际更新函数,并使用coroutine.yield()
答案 1 :(得分:0)
虽然协程路由非常好,但另一个选项可能是,取决于限制(例如,如果你可以将obj传递给脚本)for stack&寄存器放在一个作为调用的一部分给出的结构中:
struct StackAndRegisters { ... }
StackAndRegisters sar; // outside update loop
// then at every call:
update(sar) -> -> ... --> helper_function(sar) --> system_state_modifier(sar)
// system_state_modifier modifies sar