我正在使用Lua进行NPC行为的C++游戏引擎。我在设计中遇到了一些问题。使用Lua在C++游戏引擎中定义NPC行为
对于需要多个帧执行的任何事情,我想使用一个进程链接列表(这是C++类)。所以这个:
goto(point_a)
say("Oh dear, this lawn looks really scruffy!")
mowLawn()
将创建一个GotoProcess对象,这将有一个指向SayProcess对象,这将有一个指向MowLawnProcess对象。这些对象将在NPC产生时立即创建,无需进一步编写脚本。 这些对象中的第一个将更新每一帧。完成后,它将被删除,下一个将用于更新。 我通过一个ParallelProcess扩展了这个模型,它将包含多个同时更新的进程。
我发现了一些严重的问题。看看这个例子:我想要一个角色走到point_a,然后去疯狂攻击任何靠近的人。该脚本将如下所示:
goto(point_a)
while true do
character = getNearestCharacterId()
attack(character)
end
这对我的设计根本不起作用。首先,当角色甚至没有开始走到point_a时,字符变量将被设置在开始处。然后,由于while循环,脚本会继续添加AttackProcesses。
我可以实现循环的WhileProcess并逐行评估脚本。我怀疑这会提高代码的可读性。
我有没有想过解决这个问题的另一种常见方法?
听起来像你的第二个例子可能会受益于使用有限状态机 – Necrolis 2011-05-30 11:28:19
我的计划是有NPC的对象表示,但我没有多想,因为上面提到的问题似乎更加“低级别“ 对我来说。 – Daerst 2011-05-30 11:45:25
使用协程的情况如何?这将是我的第一个方法。 – 2011-05-30 12:03:27