我研究了一点Lua,而且我对C ++比较熟悉,但我仍然没有看到任何真正的理由我想要使用Lua(或任何脚本语言) )与C ++结合使用。如果我已经用C ++(快速语言)制作游戏,为什么我不会用C ++做所有事情?毕竟,我已经熟悉C ++了。为什么我要花时间学习一门新语言以及如何将它集成到我的C ++代码中?我确定只需要设置界面和工作就会出现问题。学习需要一些时间,它将如何真正得到回报?它真的只对大型开发团队有利吗?
答案 0 :(得分:5)
我赞同已经说过的话,我想加入自己的想法,因为我正在将Lua整合到我的游戏引擎中这一刻!
这取决于你正在制作什么类型的游戏,但不管你对允许粉丝修改游戏的感觉如何,将引擎组件与游戏组件分开是一种很好的做法。
第一个主要好处是快速迭代。我做出的最佳决定是将F5键连接到重新加载Lua状态(就像浏览器的F5刷新一样,如果不是很明显的话)。我可以编辑脚本然后在我正在运行的引擎中混搭F5以立即查看结果。这比重建本机代码更有效。你不太可能失去思路,你可以很快调试(游戏)问题。
我发现在Lua工作让我更有创意。它帮助我抛开我僵硬,无情的工程师大脑,并带出我的实验性#YOLO大脑。为什么我的角色的HP需要在C ++对象中仔细而精确地存储为32位整数?引擎的任何部分都不需要知道这种信息。更高级别的游戏玩法是唯一关心的事情。惠普仅偶尔更新,它与规则相关,而不是任何引擎考虑。
将C ++视为您的主要小提琴手,将Lua视为您的指挥:您的小提琴手在拉小提琴时表现得更好/更快,但您的指挥家并没有拉小提琴;他只是告诉你的小提琴手发出更大声/更柔和/更快/更慢的声音。
Lua很慢(相对于C ++),但这很好。 Lua不需要在5ms内将OGG解压缩到PCM中;这是你的引擎工作。 Lua做出了非常高级别的决定:"这是我现在想播放的音频。"
我单独做很多项目,我可以诚实地告诉你,整合Lua是一件非常好的事情。它在低级技术笨重巨型和实际 游戏之间创造了一个非常清晰的分离。
答案 1 :(得分:3)
主要是为了灵活性,如果你想稍后更改某些内容的行为,只需更改脚本并重新加载它而不必重新编译服务器。
以下是为什么Cryengine(热门游戏系列Crysis的引擎)的概述:http://docs.cryengine.com/display/SDKDOC5/Script+Usage
这是一个MMORPG项目,其核心是C ++,并在Lua中编写脚本:https://github.com/otland/forgottenserver/
答案 2 :(得分:3)
通常使用抽象方法将应用程序的各层相互拆分。
通常,您的部分应用程序对性能不敏感。
如果在高性能核心和性能不敏感的可编写脚本部分之间放置脚本接口,则首先获得巨大的抽象层优势。如果操作正确,脚本部分中的任何错误都不会导致内存损坏或以其他方式调用UB。
现在,代码无法混合,并且其中的错误与应用程序的其余部分隔离。
最重要的是,您现在可以使用一种语言来处理很多事情(对象生命周期,字符串操作,逻辑运行时修改等)非常简单。错误带来的风险较低,加上易于表达的内容可以大大提高您对新功能进行原型设计的能力,并在发布之前降低质量保证开销。
最重要的是,因为你有一个脚本引擎,你的游戏现在可以安全地#34;重写本身:在C ++ pure中这样做会更难。如果危险(甚至"安全")
,重写自己是一个强大的工具