为什么没有很多用Java编写的商业3D视频游戏(不是随机开放源2D游戏)?从理论上讲,这很有意义:您几乎免费地获得了生产力的提高和一个跨平台的应用程序,其中包括大量的Java库和内置的垃圾收集器(尽管我承认我我不确定后者是否是一件好事。那么为什么很少使用它呢?我只能想到为Java平台编写的几个流行的商业游戏。
是因为性能吗?如果是这样,GPU难道不是大部分的繁重工作吗?
游戏开发世界是一个有趣的世界:一方面,他们通常很快就会接受新的想法,另一方面,他们仍然处在僵局。
事实是,切换到.NET / Java /除C / C ++之外的任何东西的动机很少。
大多数游戏公司从其他公司获得游戏引擎的部分许可。这些部分是用C ++编写的,尽管您可以访问源代码以便移植,但是这需要花费很多精力(当然,许可证需要允许它)。
同样,C ++中已经存在许多旧代码。如果以前项目中的代码可以重复使用(例如,如果您要编写续集),则更重要的是坚持使用相同的语言,而不是用新的语言重写(因为这样很可能会重新引入)大量的错误,您需要花费一些时间来解决。
最后,无论如何,用100%C ++编写游戏都是很罕见的- 使用脚本语言可以完成很多工作,无论脚本是自定义的,还是只是集成现有的语言(Lua如今都是最受欢迎的语言之一)。
就垃圾收集而言,这可能是个问题。问题不仅仅在于它存在,还在于它是如何工作的- 垃圾收集器必须是非阻塞的(或者至少保证仅非常短暂地阻塞),因为将游戏冻结10秒钟是不可接受的,它会扫描所有分配的内存,以查看可以释放的内容。我知道Java在接近用尽内存时(在某些游戏中,它会)会在GC’ing中阻塞很多。
您的工作也受到更多限制:由于运行时的开销,您无法充分利用硬件。想象一下Crysis是用Java编写的……即使这是唯一可见的区别,也不会是相同的(我也很确定您需要Core i7来运行它)。
这并不意味着这些语言没有在游戏开发中占有一席之地-不,我不仅指工具编程。对于大多数游戏,您不需要C ++带来的额外性能(包括3D游戏),而且如果您是从头开始编写所有内容,那么使用XNA之类的东西就很有意义了-实际上,很有机会。
就商业游戏而言-RuneScape算在内吗?那很可能是最成功的Java游戏。