为什么很多商业3D视频游戏(而不是随机开源的2D游戏)都是用Java编写的?从理论上讲,这很有意义:您可以获得几乎免费的生产力提升和跨平台应用程序,以及大量的Java库和内置的垃圾收集(尽管我承认我不确定后者是否是一件好事)。那么为什么它很少被使用呢?我只能想到几个为Java平台编写的流行商业游戏。
是因为性能的原因吗?如果是这样的话,大部分繁重的工作不是都是由GPU完成的吗?
发布于 2009-06-23 19:37:01
游戏开发的世界是一个有趣的世界:一方面,他们经常很快接受新的想法,另一方面,他们仍然处于石器时代。
事实是,除了C/C++之外,很少有那么多的动机切换到.NET/Java/任何其他东西。
大多数游戏公司从其他公司获得游戏引擎的部分授权。这些部分是用C++编写的,虽然您可能有权访问源代码以便移植它,但这需要付出很多努力(当然,许可证需要允许它)。
此外,许多遗留代码已经存在于C++中。如果以前项目中的代码可以重用(例如,如果您正在编写续集),这对于坚持使用相同的语言而不是用一种新的语言重写它更加重要(更重要的是,您可能会重新引入大量的错误,您需要花费时间来解决这些错误)。
最后,很少有游戏是用100%的C++编写的--很多都是使用脚本语言完成的,不管是自定义的还是集成现有的语言(Lua是现在比较流行的语言之一)。
就垃圾收集而言,这可能是一个小问题。问题并不在于它的存在,而在于它是如何工作的-垃圾收集器必须是非阻塞的(或者至少保证只会非常短暂地阻塞),因为让游戏冻结10秒,同时扫描所有分配的内存以查看可以释放什么是不可接受的。我知道当Java的内存接近耗尽时,它在GC中往往会被卡住(对于一些游戏来说,它会)。
您还会受到更多的限制:由于运行时的开销,您无法完全利用硬件。想象一下用Java编写的Crysis……即使这是唯一明显的区别,它也不会相同(我也非常确定您需要一个核心i7来运行它)。
这并不意味着这些语言在游戏开发中没有一席之地--不,我指的不仅仅是工具编程。对于大多数游戏,您不需要从C++获得的额外性能,包括3D游戏,如果您全部从头开始编写,使用像XNA这样的东西是非常有意义的-事实上,它很有可能会这样做。
就商业游戏而言-- RuneScape算吗?这很可能是最成功的Java游戏。
发布于 2009-06-23 19:10:29
我认为John Carmack说得最好:
最大的问题是
太慢了。在纯cpu /存储器/显示器/通信级别上,大多数现代手机应该是比Game Boy Advanced好得多的游戏平台。有了Java,在大多数手机上,你只剩下大约4.77 mhz的IBM PC的CPU处理能力,以及对一切的糟糕控制。...snip...一次写入,随时随地运行。哈哈。哈。我们现在只在四个平台上测试,没有一对有完全相同的怪癖。所有的商业游戏都是针对每个(通常是100+)平台分别进行调整和编译的。可移植性不是糟糕性能的理由。
(source)
诚然,他说的是移动平台,但我发现Java作为一个整体也存在类似的问题,来自于C++背景。我很怀念能够按照自己的方式在Stack/Heap上分配内存。
发布于 2009-06-23 18:59:23
首先,Java缺少运算符重载,这使得你必须处理的所有数学运算都非常非常烦人,而且很难读懂。
如果您需要处理的所有矩阵乘法和仿射向量都是格式良好的数学表达式,而不是像这样的面向对象表达式,那么它们就更容易理解
product = vector.multiply(projectionMatrix).dotProduct(otherVector);这太可怕了。数学不应该是这样的。
https://stackoverflow.com/questions/1034458
复制相似问题