游戏NPC多动作lua脚本设计

时间:2011-01-26 10:48:33

标签: c++ lua luabind

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

当某些NPC点击或计时器执行某些操作时,我需要调用NPC功能。 目前我卡在2个NPC脚本设计之间。

  1. 使用一种npcname_action来区分每个NPC 为每个不同的NPC命名是一件很麻烦的事 我还在考虑如何在我的项目中实现这一点 例如:

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

    OnClick() { .. }
    OnTimerAction() { .. }
    
  3. 哪一个更好,为什么?

2 个答案:

答案 0 :(得分:3)

您可以使用其他设计。

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

假设npc是一个包含所有NPC的表。它的键是NPC的名字,它的值是另一个表。其他表键是操作,其值是此操作的功能。 所以,如果你希望bob在点击时跳转,并且在计时器之后哭泣,只需执行:

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

答案 1 :(得分:1)

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

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

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