我需要在我的currect游戏项目中加入剧本NPC。该项目本身是用C++语言开发的。我将使用Luabind绑定lua和c++。
当某些NPC点击或计时器被激活时,我需要调用NPC函数。目前,我停留在两个NPC脚本设计之间。
给每个不同的全国人大取名字有点麻烦。
我仍在考虑如何在我的项目中实现这一点。
示例:
HotelBellboy12_Click() { ..} HotelBellboy12_TimerAction() { ..}使用函数名的
每个npc都有自己的lua文件。
我正在考虑将脚本加载到内存中,并在需要时使用luaL_loadbuffer将脚本加载到luaL_loadbuffer中
示例:
OnClick() { ..} OnTimerAction() { ..}
哪个更好,为什么?
发布于 2011-01-27 16:39:30
我以前做过类似的事情,我使用了类似于你的第二个选项。当映射加载时,我加载一个包含所有NPC数据的配置Lua文件;其中包括用于NPC的脚本文件的名称。
当我需要在游戏中加载NPC时,我会编译Lua文件。NPC可以使用“模型”NPC类型来支配大多数在NPC配置中指定的常见行为(例如商人类型或平民类型)。这些模型类型提供所有基本功能,例如单击时提供一个交易窗口。特定的NPC使用像OnClick()这样的函数来覆盖它们的模型并提供自定义处理程序。
这对我来说很好,虽然如果你的游戏变得很大的话,它最终会变成大量的脚本。
发布于 2011-01-27 16:21:41
你可以用另一个设计。
利用这一事实,表键和值可以是任何类型。
假设npc是一个包含所有NPC的表,它的键是NPC的名称,它的值是另一个表。其他表键是操作,其值是此操作的函数。所以,如果你想让鲍勃在点击的时候跳起来,让爱丽丝在计时器后哭,那就做吧:
npc.bob.click = function () jump() end
npc.alice.timer = function () cry() endhttps://stackoverflow.com/questions/4803641
复制相似问题