先说结论:python可以做游戏,但是不推荐,建议使用其他解释型语言。另外,大型项目(我指的是真正的大型游戏或者软件互联网项目,而不是鹅厂猪厂生产的那些手游“大作”)不建议使用动态类型语言开发,至于具体原因,可参考下面的,就不在这深入了。为什么说「动态类型一时爽,代码重构火葬场」?www.zhihu.com

目前手机游戏界主流的模式确实是编译语言(常见的是c++或c#)实现引擎,解释型语言实现业务逻辑。在这方面常见的三大手游引擎一般是这么做的:unity常用的方式是c#加lua,ue4可以用c++加lua,cocos2dx是c++加lua或者js/ts(当然这俩其实是一码事)。

为什么要在业务层使用解释型语言呢?核心原因并不是解释型语言的开发效率,而是为了热更新。也就是你要修改bug或者添加新功能的时候,用户不需要重新下载安装包,只要在游戏内动态下载更新就可以了,这样对游戏的留存有很大帮助。根据我过去的经验,每次强行让用户更新安装包,都会有5%~10%的用户流失,而热更新只要每次的更新量不大就基本不会有流失。

这种静态引擎+动态业务逻辑,基本架构是游戏内的通信、渲染、内存管理等功能由编译语言实现,然后中间还有一层脚本语言的解释器,这个解释器往往也是c++实现的。上层的业务逻辑由解释型的脚本语言实现,大致上是一个脚本-解释器-引擎的流程。

从这个流程就可以看出来,由于中间多加了一层解释器,这个执行的过程会有额外的内存和运算开销,肯定没有直接编译型语言实现的效率高,但是对绝大多数手机游戏来说,这个性能上的损失是可以接受的,支持热更远比这点性能损失要重要得多。

所以,你要问解释型语言能不能做游戏,这个问题是肯定的,而且是目前手游界的主流模式,python能不能做这个事儿呢?Lua能做的事情当然python也能。但是你要问我要不要用python来做这个事情呢?我是不推荐的。原因无他,从头造轮子,既无必要,又无优势。大家都用lua或者js,这两种语言各自都有它的优点,这点我就不细说了,最重要的是,这两种语言市面上有很多成熟的引擎可以用,而你非要标新立异地用python,这就代表你要从头开始造很多很多的轮子,这个过程中要踩很多很多的坑,付出很多很多的学费。网易用python,有其历史原因,而且网易这样的大厂,掏得起学费,造得起轮子,一般中小公司就不要盲目跟风了。