是否有可能在纯Python中编写像魔兽世界一样大的3D游戏?假设使用DirectX/D3D绑定或OpenGL绑定.
如果没有,那么用Python做这样一个项目最大的阻碍是什么?我知道游戏往往属于C和C++领域,但有时候人们会习惯做事!
任何信息都有助于满足我的好奇心.
GIL会发布关于3d客户端性能的重大问题吗?使用say,OpenGL或DirectX绑定与本机使用库的一般性能损失是什么?
是.它将如何表现是另一个问题.
一个好的开发模式是在纯python中开发它,然后对它进行分析,并重写性能关键的瓶颈,无论是在C/C++/Cython中,还是在python本身,而是使用更高效的代码.
虽然我不知道魔兽世界的所有技术细节,但我会说,它的大小的MMO可以用Stackless Python构建.
EVE Online使用它,他们有一个服务器,可以容纳200,000个用户.
从技术上讲,任何Turing Complete编程语言都可以实现.
实际上,你会遇到很难用高级语言制作网络堆栈的问题,因为服务器必须非常快速地处理这么多玩家.
在客户端的游戏方面,应该没有问题,因为没有什么太复杂的GUI或任务或键盘输入和你有什么.
问题将出在服务器上计算密集的任何问题上.像登录一样在人工时间发生的任何事情可能都会很好,但如果某些东西需要瞬间超过一万用户,你可能想要用C完成的外部库.
现在,一些Python大师将从木制品中走出来并撕掉我的头,因为正如我在顶部所说的那样,从技术上讲,任何事情都可以通过足够的努力来完成.
游戏Minions of Mirth在魔兽世界的规模上或多或少是一个完整的MMO,主要是用Python完成的.客户端使用Torque Game Engine,它是用C++编写的,但服务器代码和行为都是Python.
是的,你可以用汇编语言,Java语言,Python语言或者脑袋来编写它.这是你愿意投入多少时间.语言性能不再是主要问题,它更多地是关于您使用哪种算法,而不是您使用的语言.
由于您的主要问题已经得到了很好的回答,我将回答您的后续问题:
GIL会发布关于3d客户端性能的重大问题吗?
在Python 2.6中,引入了多处理库,因此您可以利用多个处理器内核而无需担心GIL.Stackless Python也有一些非常酷的相关内容.
使用say,OpenGL或DirectX绑定与本机使用库的一般性能损失是什么?
我没有任何基准来支持它,但使用绑定与本机库的惩罚足够小,你不必担心它.
除了Eve Online之外,还有一些其他真实的行业示例.90年代后期在Origin的Ultima Online 2项目上的服务器后端主要是基于C++服务器基础架构的Python,而来自NCSoft的晚期Tablua Rasa游戏(与大多数相同的开发团队)具有相同的架构.
在扭曲的矩阵蟒蛇服务器架构与此完全相同的目标最初创建-实际上是从当时的UO2项目的开发,并有一个叫做Ninjaneering公司,试图通过MMO项目的代码基商业化.
作为脚本引擎(例如EQ2)已经朝着lua迈进,因为它更容易嵌入和实例.
在这种环境中python的问题往往是在语言之间的接口.当您执行将一些高性能系统从python移动到C/C++的不可避免的优化时,然后跨语言边界来回推送数据并跨语言边界调用函数成为一个问题.如果做得不好,序列化的成本可能很高.例如,使用早期版本的SWIG会将指针序列化为其字符串表示形式,然后将字符串解析回另一侧的指针!
从90年代中期看出这篇论文:
但是,从长远来看,我认为这是可能的.
我认为您的具体问题的答案是"......纯粹的Python ......"答案是否定的.
Python的速度不够快,无法足够有效地调用OpenGL或DirectX来以极低的帧速率重新创建魔兽世界.
像许多其他人一样回答,鉴于一些高级框架工作,可以使用Python具有脚本语言,但至少你需要某种用C++等其他语言编写的图形系统来处理图形.对于网络,假设WoW不是一个动作游戏,你可能能够逃脱纯Python,但很可能那部分也需要是一些非python库.