When using Lua coroutines with C#, is it possible to have a Lua coroutine that yields back to C#?
在我制作的游戏中,我主要使用C#进行开发,但我想使用Lua协程来处理一些游戏逻辑,因为它们可以很好地表示接管多帧的动作。我以前从未真正使用过Lua,所以我不确定这是否行得通。
理想情况下,我希望C#游戏更新功能能够将要执行的一个或多个Lua协程添加到队列中,然后每帧迭代队列,执行每个协程直到产生或完成。
我只想知道这是否可能,如果可以的话,如何实现它,因为它似乎不适合Lua使用的" lua_dofile"范式。
这里有一些C#伪代码来说明我的意思:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | 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范例"非常吻合:主机应用程序公开了一种脚本来注册供主机调用的回调的方法;例如
当主机运行用户脚本时,该脚本可以传递主机回调函数/协程,并且主机将句柄保存到它们。
只要单击鼠标或您提过要调用它们的任何其他操作,主机都可以在每一帧调用/恢复函数/协程。