我感兴趣的是实现一个类似于这里所做的对话系统,fungus.html。
-- Display text in a SayDialog
say("Hi there")
say "This syntax also works for say commands"
-- Display a list of options in a MenuDialog
-- (Note the curly braces here!)
local choice = choose{ "Go left", "Go right" }
if choice == 1 then
say("You chose left")
elseif choice == 2 then
say("You chose right")
end我从这个lua代码片段中得到的启示是,代码非常容易编写和遵循,我希望使用类似的方法。我想知道的是,在等待选择的同时,如何在不延迟引擎代码的情况下实现这一点。
函数调用选择{“向左”、“向右”}返回一个值,这使我想说这是一个同步调用。由于我们调用引擎代码是同步的,然后停止引擎,但是这个函数调用不应该是直接回答问题的函数调用--我认为它需要在常规的主循环中得到回答,这样才不会干扰程序的其余部分。
据我所知,解决这一问题的唯一方法是依靠多线程。要让脚本在一个单独的线程上处理,在选择调用中首先添加一个提示符,然后等待提示被回答,获取结果,然后继续执行lua脚本。
,什么是解决这个问题的好方法,而不用使用lua代码就很麻烦?
发布于 2018-05-08 12:44:57
通常,您会在Lua线程(coroutine)中运行阻塞代码。
您的choose{}调用将在内部产生,应用程序将定期对外部事件(输入/呈现/其他)恢复该线程。这样,您就可以让主循环自由运行,在对话框准备好之后,在最近的迭代中获取该对话框的结果。
服务于choose{}调用的对象可能会在完成时触发一些事件,这个事件可能会被应用程序的更大的系统监视,该系统将等待其他异步任务(文件加载、http请求等)的完成。
https://stackoverflow.com/questions/50223186
复制相似问题