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