在我正在制作的游戏中,我主要使用C#进行开发,但我想使用Lua协同程序处理一些游戏逻辑,因为它们可以很好地表示在多个帧上采取的操作。我之前从未真正使用过Lua,所以我不确定这是否有用。 理想情况下,我希望C#游戏更新功能能够将一个或多个要执行的Lua协程添加到队列中,然后每个帧迭代队列,执行每个协同程序直到它产生或结束。 我只是想知道这是否可行,如果可行,如何实现它,因为它似乎不适合Lua使用的“lua_dofile”范例。
这是一些C#伪代码来表明我的意思:
GameUpdate()
{
// Update game logic
// (which may add one or more Lua coroutines to the queue)
// Update input, physics, sound, etc
// In Lua:
// For each coroutine in queue,
// execute it until it reaches a yield,
// or it finishes, whichever comes first
}
GameRender()
{
// Render a frame
}
更新:这篇文章(http://www.gamedev.net/topic/585128-luainterface-and-coroutines/)给出了我正在寻找的答案。简而言之,它是可能的。
答案 0 :(得分:3)
是的,这是可能的。它适用于“dofile范例”:主机应用程序公开了一种方法,让脚本为主机调用注册回调;例如RegisterEventHandler(foo)
,hostTypeInstance.OnFoo = foo
等
当主机运行用户脚本时,脚本可以传递主机回调函数/协程,并且主机将句柄保存到它们。
无论何时单击鼠标,或者您为其调用的其他任何内容,主机都可以每帧调用/恢复函数/协同程序。