让lua文件像游戏引擎中的脚本一样而不是配置文件的设计模式是什么?

时间:2014-09-12 01:59:47

标签: multithreading scripting lua game-engine

我正在尝试实现与不使用lua作为配置/回调文件成功编写游戏脚本的任何人相同的设计。我希望功能如下:

在" EventIncountered.lua"

1    moveToPoint(500, 500)
2    --returns here when moving is done.
3
4    dance()
5    --return here when done dancing etc...

在我的游戏的玩家类中,我希望这些功能可以更新玩家的位置,动画等......每个更新帧调整的字段。然后,当达到所需的播放器状态时,lua文件应该从它停止的地方继续。我知道它可以完成并且已经提出类似的问题;但是,我从他们那里学到的是如何使用lua作为配置文件来读取和调用某些事件的回调函数(我甚至知道一个问题,其中问这个问题的人知道怎么做,但是问了一个更高层次的问题。我知道那里有人会愿意分享这个保护得很好的秘密。

1 个答案:

答案 0 :(得分:0)

我找到了一个使用Game Coding Complete Fourth Edition

中找到的想法的问题的合适解决方案

它描述了一个ProccessManager类,它允许对每个帧倾向的进程进行排队,直到该进程完成。排队的Process对象将有一些信号表明它是完整的,并且一个函数指针将被调用以倾向于该帧的该进程。

虽然我实际上不再需要这个功能,因为我已经学到了很多关于脚本如何在游戏引擎中工作的知识,但是可以将函数暴露给lua,使脚本能够创建和排队进程。

在创建这些过程时,可以指定一种趋向于该过程的方法(一个不同脚本中的函数或类似的东西),一种确定该过程是否已完成的方法,以及对正在完成的其他过程的依赖性。

脚本最终会看起来像这样:

- - - - - - - - queue_processes.lua

-- queueProcess(fileName, functionName, dependencies)
-- the lua function that corresponds to these processes would then 
-- need to return a special value to signal that it is done.

queueProcess("basic_processes.lua", "moveToRock", 0)
queueProcess("basic_processes.lua", "waitTenSeconds", moveToRock)
queueProcess("basic_processes.lua", "sayHi", waitTenSeconds)

-- the cool part about doing things this way is that
-- it wouldn't be hard to add logic to this file
-- and just keep queuing processes when others 
-- finish or certain conditions have been met.

您可以使用这个想法通过脚本完成很多很酷的事情。 我希望当我提出这个问题时,这可以帮助那些担任我职务的人。

编辑:这是一个很好的答案,这个问题花了几段时间。 因此,它不应该被关闭。至少我能把它留在这里 所以有类似问题的人可以找到答案。