如何使用 C++ 中的 LUA 脚本编写带有对话和菜单的交互式 NPC?
2019-1-25 7:27:46
收藏:0
阅读:162
评论:1
我正在开发一个 C++ 的 2D 游戏引擎,考虑将 NPC 的脚本(如对话和菜单选择项)移植到 LUA 中。但我很难想象如何等待用户/客户端的响应。我的场景如下 -
- 用户点击 NPC。
- NPC 启动对话窗口,玩家无法移动。读取并开始运行 LUA 脚本,例如:
mes("你好!" .. 玩家姓名)
next()
reply = select("你想做这个吗?", "还是那个?")
if reply == 1 then
mes("你选择了:那个!")
close()
end
现在,我想让脚本一次只发送一条消息 mes,而 next() 函数会向客户端发送下一个按钮。之后,脚本会暂停并等待用户输入。
一旦点击了下一个按钮,脚本会继续运行,并向客户端发送一个菜单。在选择后,它会进一步进入条件子句或不进入,这取决于选择。
所有这些都是服务器端的,对话被发送到客户端。我想实现的是在等待客户端响应时的暂停功能。
在 Lua 中如何实现这一点?如果您有最佳实践的建议,我将不胜感激。
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?

我同意 @Blaze 的观点,我的答案是协程。那么问题就是,如何在 Lua 脚本中包装协程。
将每个脚本都包装成自己的协程可能会失去一些性能,但如果大多数脚本都比几行长,这应该不会非常明显。除了速度问题,你还需要记住,在 5.1 版本中,即使在脚本的顶层,
coroutine.running()也不会返回nil,因为这也只是一个协程。在 5.3 版本中,这不是很大的问题,因为它总是返回一个线程加一个布尔值。* 你需要进行基准测试,看看这是否有意义。
下一个重要的问题是,在 Lua 还是在 C++ 中进行包装。Lua 显然更灵活,更易于更改,但 C++ 可能会提高一些性能,这在开发游戏时很少发生。明显的缺点是 C API 使用起来更不方便。
最重要的问题是,你不能(或者不应该)只将
next()实现为对coroutine.yield('next')的包装,因为你可能有嵌套的协程;所以你需要一些更多的逻辑,来通过你的 API 调用到达顶层,然后到达 C++。我希望这能为你决定是否使用协程解决这个问题提供一个很好的概述。