我有一个带有主循环的游戏 - 在每个循环上,我都调用游戏中的每个 NPC ->ProcessAI() 来执行任何动作。这是一个服务器,因此不会像客户端游戏那样在每一帧上都执行对 ProcessAI 的调用!它也是单线程的。
现在我想使用 luabind 用 lua 扩展 C++ 代码库(也许,即使有提升开销)。所以我将我的 NPC 类的一些功能暴露给 LUA。
例如,我想创建演员脚本 - 具有更复杂行为的老板战斗 - 每当在我的 c++ ProcessAI 函数中发生事件时 - 我会将其委托给特定 NPC 的相应 lua 脚本。
我想象在我的 boss.lua 脚本中我会有这样的东西
function OnEngageCombat(NPC)
NPC:say ("Some taunts...")
ScheduleEvent(CastEvilSpell,/*time*/2000,/*numExecutions*/1,)
end
function CastEvilSpell(NPC)
NPC:CastSpell("someSpell")
end
但是-我不知道该怎么做-我认为 ScheduleEvent 应该是导出到 Lua 的一些 C++ 函数-但是保持 NPC(老板)的对象引用并在该脚本中调用函数的最佳方法是什么大约 2 秒后?
此外,随着这种延迟执行——我希望 NPC 可以相互交互——我目前的想法是为每个特殊的 NPC 设置一个演员行为脚本。
现在我想象的是在两个 NPC 之间发起对话,例如
function DoGossip(NPC)
// check if NPC1 is close to NPC2
if NPC:DistanceToNpc("SomeGuy") < 10 then
StartConversation1()
end
function StartConversation1(NPC)
NPC:Say("Hello ...")
// wait a moment now trigger NPC2 to reply
????
end
基本上 - 我如何从 lua scriptA 中调用一个函数,该函数存在于 lua scriptB 中,它是 NPC2 的行为脚本。什么是好的设计?
谢谢