【问题标题】:Game NPC multi-action lua script design游戏NPC多动作lua脚本设计
【发布时间】:2011-06-15 18:36:17
【问题描述】:

我需要将可编写脚本的 NPC 放入我当前的游戏项目中。 项目本身是用 C++ 语言开发的。 我将使用 Luabind 来绑定 lua 和 c++。

当某些 NPC 点击或计时器被激活时,我需要调用 NPC 函数。 目前我卡在 2 个 NPC 脚本设计之间。

  1. 使用一种 npcname_action 来区分每个 NPC。
    给每个不同的 NPC 起名字有点麻烦。
    我仍在考虑如何在我的项目中实现这一点。
    示例:

    HotelBellboy12_Click() { .. }  
    HotelBellboy12_TimerAction() { .. }
    
  2. 使用函数名。
    每个 npc 都有自己的 lua 文件。
    我正在考虑将脚本加载到内存中,并在需要时使用 luaL_loadbuffer 将其加载到 luaState
    示例:

    OnClick() { .. }
    OnTimerAction() { .. }
    

哪个更好,为什么?

【问题讨论】:

标签: c++ lua luabind


【解决方案1】:

您可以使用其他设计。

利用表键和值可以是任何类型这一事实。

假设 npc 是一个包含所有 NPC 的表格。它的键是 NPC 的名字,它的值是另一个表。这个其他的表键是动作,它的值是这个动作的函数。 所以,如果你想让 bob 在点击时跳起来,而 alice 在计时器后哭泣,只需这样做:

npc.bob.click = function () jump() end
npc.alice.timer = function () cry() end

【讨论】:

    【解决方案2】:

    我以前做过类似的事情,我使用了类似于你的 #2 选项的东西。当地图加载时,我会加载一个包含所有 NPC 数据的配置 Lua 文件;其中是用于 NPC 的脚本文件的名称。

    当我需要在游戏中加载 NPC 时,我会编译 Lua 文件。 NPC 可以使用“模型”NPC 类型来指示 NPC 配置中指定的大多数常见行为(例如商人类型或平民类型)。这些模型类型提供所有基本功能,例如单击时提供交易窗口。特定 NPC 使用 OnClick() 等函数来覆盖其模型并提供自定义处理程序。

    这对我来说效果很好,虽然如果你的游戏变得很大,它最终会变成大量的脚本。

    【讨论】:

      猜你喜欢
      • 2011-06-05
      • 1970-01-01
      • 1970-01-01
      • 2015-12-21
      • 1970-01-01
      • 2014-08-26
      • 2020-10-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多