gpt4 book ai didi

c++ - 如何在不拖延主循环的情况下实现对话系统?

转载 作者:行者123 更新时间:2023-11-30 03:23:41 25 4
gpt4 key购买 nike

我有兴趣实现一个类似于此处所做的对话系统 http://fungusdocs.snozbot.com/lua_controlling_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 代码片段中得到的收获是代码非常容易编写和遵循,我希望使用类似的方法。 我想知道如何在等待选择时不停止引擎代码的情况下实现这一点。

函数调用 choose{ "Go left", "Go right"} 返回一个值,这让我想说这是一个同步调用。由于我们同步调用引擎代码,因此我们停止了引擎,但这个函数调用不应该是直接回答问题的那个——我相信它需要在常规主循环中回答,以免干扰其余部分程序。

据我了解,解决此问题的唯一方法是依赖多线程。让脚本在一个单独的线程上处理,在 choose 调用上首先添加一个提示,然后等待提示被回答,获取结果,然后继续执行 lua 脚本。

在不使 lua 代码使用起来麻烦的情况下,有什么好的方法可以解决这个问题?

最佳答案

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

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

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

关于c++ - 如何在不拖延主循环的情况下实现对话系统?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50223186/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com