我需要将可编写脚本的NPC放在我当前的游戏项目中。 该项目本身是用C ++语言开发的。 我将使用Luabind绑定lua和c ++。
当某些NPC点击或计时器执行某些操作时,我需要调用NPC功能。 目前我卡在2个NPC脚本设计之间。
使用一种npcname_action来区分每个NPC 为每个不同的NPC命名是一件很麻烦的事 我还在考虑如何在我的项目中实现这一点 例如:
HotelBellboy12_Click() { .. }
HotelBellboy12_TimerAction() { .. }
使用功能名称。
每个npc都有自己的lua文件
我正在考虑将脚本加载到内存中,并在需要时使用luaState
加载到luaL_loadbuffer
中
例如:
OnClick() { .. }
OnTimerAction() { .. }
哪一个更好,为什么?
答案 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()等函数来覆盖它们的模型并提供自定义处理程序。
这对我来说效果很好,但如果你的游戏变大,它最终会成为大量的脚本。