当使用Lua协同程序和C#时,是否可以使用Lua协程返回C#?

时间:2012-10-17 11:48:54

标签: c# lua

在我正在制作的游戏中,我主要使用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/)给出了我正在寻找的答案。简而言之,它是可能的。

1 个答案:

答案 0 :(得分:3)

是的,这是可能的。它适用于“dofile范例”:主机应用程序公开了一种方法,让脚本为主机调用注册回调;例如RegisterEventHandler(foo)hostTypeInstance.OnFoo = foo

当主机运行用户脚本时,脚本可以传递主机回调函数/协程,并且主机将句柄保存到它们。

无论何时单击鼠标,或者您为其调用的其他任何内容,主机都可以每帧调用/恢复函数/协同程序。