使用Lua协程与C#一起使用时,是否可能有一个Lua协程可以返回到C#?

在我正在制作的游戏中,主要使用 C# 进行开发,但我希望使用 Lua 协同程序来处理部分游戏逻辑,因为它们可以很好地表示在多个帧上执行的操作。但我之前从未使用过 Lua,所以我不确定这是否可行。 理想情况下,我希望 C# 游戏更新函数能够将一个或多个 Lua 协同程序添加到一个队列中以执行,然后每帧迭代队列,在执行每个协同程序直到它产生输出或完成。 我只想知道这是否可行,如果可行,如何实现,因为它似乎不符合 Lua 使用的“lua_dofile”范例。

这里是一些 C# 伪代码以显示我的意思:

GameUpdate()
{
  // 更新游戏逻辑
  //(这可能会将一个或多个 Lua 协同程序添加到队列中)

  // 更新输入、物理、声音等等

  // 在 Lua 中:
  // 针对队列中的每个协同程序,
  // 执行它直到它产生输出或完成,以先到者为准
}

GameRender()
{
  // 渲染一帧
}

更新:这篇文章(http://www.gamedev.net/topic/585128-luainterface-and-coroutines/)给出了我所寻找的答案。简而言之,这是可行的。

点赞
用户501459
用户501459

是的,这是可能的。它与“dofile范例”非常匹配:主机应用程序公开了一种让脚本注册回调让主机调用的方式;例如 RegisterEventHandler(foo), hostTypeInstance.OnFoo = foo等。

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

主机可以每帧调用/恢复函数/协程,每当鼠标被单击,或者您安排它们被调用的任何其他东西。

2012-10-17 16:30:43