有人能简洁地解释一下为什么我需要在游戏中将Lua和C ++混合使用吗?
我学过一点Lua,对C++也有一定了解,但我仍然不明白为什么我要在C++中使用Lua(或任何其他脚本语言)。如果我已经在用C++(一种快速的语言)制作游戏,为什么不直接用C++完成所有工作呢?毕竟,我已经熟悉C++了。为什么要花时间学一门新语言,并学习如何将它集成到我的C++代码中?我相信设置接口并使其正常工作的过程中可能会出现问题。学习需要花些时间,真正的收益是什么?是否只对大型开发团队有益?
通常最好的实践是通过抽象来将应用程序的不同层进行分离。
很多时候,应用程序的一部分对性能并不敏感。
如果在高性能的核心和性能不敏感的可脚本化部分之间放置一个脚本接口,你将首先获得一大好处,即抽象层次的好处。如果做得好,脚本部分中的任何错误都不会导致内存损坏或其他UB的情况。
现在代码不能相互混合,而且其中的错误与应用程序的其余部分隔离开来。
此外,现在你可以使用一个让许多事情(对象生命周期、字符串操作、逻辑运行时修改等)变得非常容易的语言。降低错误风险以及表达事物的简易度可以极大地增加你原型新功能的能力,并在发货前减少QA开销。
此外,由于你拥有一个脚本引擎,你的游戏现在可以“安全”地重写自己,这在纯C++中进行会更加困难。而重写自己是一个强大的工具,但也是危险的(即使“安全”)。
我赞同之前所说的话,并且我想加上自己的想法,因为我正在将 Lua 集成到我的游戏引擎中!
这取决于你正在制作的游戏类型,但无论你对让粉丝修改你的游戏有什么感觉,将引擎组件与游戏组件分离是很好的做法。
第一个重要的好处是快速迭代。我做的最好的决定是将 F5 键连接到重新加载 Lua 状态(就像浏览器的 F5 刷新一样,如果这不明显的话)。我可以编辑脚本,然后在运行中的引擎中狂按 F5 以立即查看结果。这比重建本地代码更有效。你不太可能失去自己的思路,并且可以非常快速地调试(游戏玩法)问题。
我发现在 Lua 中工作使我更有创造性。它帮助我放下僵化、不可宽恕的工程师脑,展现出我的实验性、 #YOLO 脑。为什么要将我的角色 HP 精确存储为 C++ 对象中的 32 位整数?引擎的任何部分都不需要知道这种信息。高层游戏玩法是唯一关心的。HP 只偶尔更新,并且与“规则”相关,而不是引擎考虑。
将 C++ 视为你的大提琴大师,将 Lua 视为你的指挥:你的大提琴大师最好在演奏大提琴时非常优秀/快速,但你的指挥永远不会弹奏大提琴,他只是告诉你的大提琴手演奏更响/更轻柔/更快/更慢。
Lua 很慢(相对于 C++),但这没关系。Lua 不需要在 5ms 内将 OGG 解压缩为 PCM;这是你引擎的工作。Lua 做出极高层次的决策:“此时此刻我想播放这段音频。”
我经常自己做项目,我可以诚实地告诉你,集成 Lua 是一件非常好的事情。它在低级技术术语和你实际的 游戏之间创建了一个非常清晰的分离。
- 如何将两个不同的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 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
主要是为了灵活性,如果您想稍后更改某个功能的行为,只需更改脚本并重新加载它,而无需重新编译服务器。
以下是为什么Cryengine使用它(流行游戏系列Crysis的引擎)的概述:http://docs.cryengine.com/display/SDKDOC5/Script+Usage
而这是一个以C ++为核心,用Lua进行脚本编写的MMORPG项目:https://github.com/otland/forgottenserver/