【问题标题】:When using Lua coroutines with C#, is it possible to have a Lua coroutine that yields back to C#?在 C# 中使用 Lua 协程时,是否有可能让 Lua 协程返回到 C#?
【发布时间】:2012-10-17 11:48:53
【问题描述】:

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

【问题讨论】:

  • Lua 没有“lua_dofile 范例”。

标签: c# lua


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-04
    • 2020-02-05
    • 2015-01-23
    • 2013-09-28
    • 1970-01-01
    • 2011-02-05
    • 2012-09-01
    • 2016-03-22
    相关资源
    最近更新 更多