首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在不中断主回路的情况下实现对话系统?

如何在不中断主回路的情况下实现对话系统?
EN

Stack Overflow用户
提问于 2018-05-07 22:11:18
回答 1查看 139关注 0票数 1

我感兴趣的是实现一个类似于这里所做的对话系统,fungus.html

代码语言:javascript
复制
-- 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代码就很麻烦?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-08 12:44:57

通常,您会在Lua线程(coroutine)中运行阻塞代码。

您的choose{}调用将在内部产生,应用程序将定期对外部事件(输入/呈现/其他)恢复该线程。这样,您就可以让主循环自由运行,在对话框准备好之后,在最近的迭代中获取该对话框的结果。

服务于choose{}调用的对象可能会在完成时触发一些事件,这个事件可能会被应用程序的更大的系统监视,该系统将等待其他异步任务(文件加载、http请求等)的完成。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50223186

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档