0

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

4

1 回答 1

3

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

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

主机可以在每一帧调用/恢复函数/协程,无论何时单击鼠标,或者您为调用它们而提出的任何其他要求。

于 2012-10-17T16:30:43.887 回答