python面向对象语言还是脚本语言_游戏开发中,脚本语言(如Lua/Python)和底层语言(C/C++)的职责划分是怎样的?...

看到这个问题,作为一个在C++和Lua之间纠缠了许多年的人,忍不住想好好的来回答一番。

先回答题主的问题,两种模式之间的优缺点和选择的出发点:

1.以C++为主导,脚本只是处理一些配置文件外加一些辅助的功能,比如读取策划数据存在lua的表里,利用协程在游戏里驱动一下剧情对话,跑个机器人之类,而游戏的主要逻辑全部放在C++层处理。这样做的优点在于C++主宰全场,不用太考虑怎样和脚本语言互相之间的调用,以及怎么处理好它们之间的关系,自然也就没有了题主引用的文章里面可能出现的把Lua当作C++来用的问题了。

缺点也是C++主宰全场,如果是只有自己一个人写还好,最多隔一段时间之后发现以前写的代码太烂,实在忍不了就推了重来。但是大部分时候还是需要与别人合作的,那么不同的人之间对于程序设计,对于C++的理解程度的差异就会很鲜明的体现在代码之中,没有一个强制执行且无论任何人都必须遵守的C++代码编写规范的话,代码写乱还是小事,不可避免会有各种内存泄漏,写越界,读越界,指针不判断导致程序崩溃,开发的时候处理起来头大,而正是上线如果出了问题麻烦就大了。而且C++的语言复杂度在那里摆着,开发效率就和程序的水平严重挂钩了,服务器纯逻辑还好,客户端加入了各种视图的处理,一旦乱起来那就是天下大乱。

然后,以前端游的时候还无所谓,而在现在手游的时代,逻辑写在C++之中,因为每次都要编译后链接到可执行文件中,对于苹果的AppStore就没有办法热更新,这也是现在很大的一个缺点。

2.以脚本作为主导,C++层一般就提供一些引擎的接口和工具函数给Lua调用,比如cocos2d-x就是提供了一个自动生成的auto luabinding外加一些手写的manual binding就把引擎的大部分接口都提供给了Lua调用。把游戏的逻辑全部放在脚本里的优点在于,首先,脚本语言的复杂程度肯定远远不如C++,上手容易,定好基本的程序结构,新来的毛头小伙看个一周照着写写也就上路了,平时也不用关心C++层是怎么实现的,有兴趣休息的时候自己研究去。抹平了语言层面的难度后,开发效率自然会高一些,而且Lua本身也是很精巧的语言,玩不出太多花样来,table加上metatable包打天下,剩下的就是照着格式调用C++层的函数完事。

动态更新方便,编译成字节码往文档目录里更新就行了,读取的时候先读文档目录再读游戏包本身,随时有问题随时改了随时更,这可能是unity现在也有了ulua的原因,基本上由于苹果的限制,脚本就成为了热更新的不二法门,越狱和安卓倒是可以跑得掉,但都只是和尚苹果才是庙。

缺点呢,其一就是要协调好C++和Lua之间的关系,这个其实问题不大,Lua并不复杂,以Lua为主导,就按照Lua的原则尽量让程序简单一些就行,一般还是很少有中二会将Lua用成C++的。其二就是我个人觉得对于程序的成长不利,虽然这事儿也分人,但是一个从C++真正开始接触实际的游戏项目的程序和一个从Lua开始接触的程序,视野肯定多多少少会有不同。

然后对于题主的理解:“如果底层库是以函数形式提供服务的,可以用脚本语言作为主导,如果底层库本身基于面向对象,脚本可以仅作为具体功能调用和配置数据来用。”大概是错误理解了引用文章里面云风的意思。用不用脚本作为主导,和宿主语言是不是面向对象的语言没有必然的关系,选择与否的原因还是在于具体游戏项目的需求,和做游戏项目的程序对于宿主语言的共识程度。

我个人认为把主要的游戏逻辑放在脚本里面会是一个主流的选择,因为符合现在这个时代游戏,尤其是手游的开发需要猛糙快的节奏(当然这主要还是在国内)而像UE4这样的引擎,即便已经算是把C++当脚本来用了,也还提供了另外一个贯穿始终的blueprint作为脚本的选择,说明脚本主导流是大势所趋。

最后,对于题主,如果是一个将要或者想要和C++/Lua纠缠的连青人,我的建议是不用有丝毫疑虑,好好学,更要多多学以致用,学好C++

已标记关键词 清除标记
表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
©️2020 CSDN 皮肤主题: 1024 设计师:白松林 返回首页