在我正在制作的游戏中,我主要是在C#中开发它,但是我想使用Lua Coroutines处理一些游戏逻辑,因为它们可以表示采取的动作在多个帧上很好。我以前从未真正使用过LUA,所以我不确定这是否会起作用。理想情况下,我希望C#游戏更新功能能够添加一个或多个Lua Coroutines,以便在队列中执行,然后每个帧在队列上迭代,执行每个Coroutine,直到屈服或完成为止。我只想知道这是否可能,如果是这样,则如何实现它,因为它似乎不符合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/)给出了我正在寻找的答案。简而言之,这是可能的。
是的。它与" Dofile范式"相吻合:主机应用程序公开了脚本注册回调供主机打电话的手段;例如RegisterEventHandler(foo)
,hostTypeInstance.OnFoo = foo
等
当主机运行用户脚本时,脚本可以传递主机回调函数/coroutines,并且主机将其保存给他们。
主机可以在每个帧,单击鼠标或您提起诉讼的任何其他框架时都可以调用/恢复函数/coroutines。