我知道C++通常被认为比游戏更好(至少是大型游戏).为什么是这样?
是什么让Java在这个领域保持竞争力?反对使用Java进行游戏编程的原因最多,哪些是神话?
编辑:我对C/C++有点不熟悉,并没有想到在第1行区分两者.<
之前Java(和C#/ .NET)不是AAA标题的可行选择的原因是已建立的游戏引擎和它们的工具链是用C++编写的.游戏开发就是在最短的时间内获得市场上的头衔,并且预算不允许在新的语言/引擎已经可用,工作良好以及拥有大量编辑器之类的东西中捣乱和支持他们的工具.
迁移到Java(或C#)还需要在big-3(PC,X360,PS3)或big-5(添加Wii,iPhone)上使用新的性能驱动的JVM(或CLI).它在技术上可行,但在经济上不可行.
编辑:对虚拟机和游戏引擎的当前状态都有低级知识的任何人都可以告诉您,JVM或CLI无疑可以通过新的游戏引擎实现,以超越当前C++引擎的性能.预防因素是时间和金钱,仅此而已.
传统上用于游戏的高性能和C和C++的惯性.
除非你正在进行3D狂欢,否则选择基于表现并不是一个重要的优先事项.
因为:
Java未编译为本机代码,这意味着在第一次运行代码时会出现性能损失.
Java没有给你一个可预测的内存模型(控制台游戏需要这个)
Java没有给你确定性的对象终结.
Java并不像C那样接近硬件,这对于许多专业的3D游戏编程来说都是必不可少的.
控制台程序员可能没有在PS3,X-Box等上运行的JVM.
运行时性能损失.
您将永远无法使用C++应用程序从Java应用程序中获得尽可能多的性能.
可能有更多的原因,比如它们使用的是用C或C++编写的预先存在的代码.
编辑:顺便说一句,我认为很多现代游戏都不是用C语言编写的.OOP适合游戏开发,而C++是事实上的选择语言.
此外,我不会将它添加到我的列表中,但正如其他人所提到的那样,有许多预先存在的代码可以很好地用于游戏行业.重写所有/大多数工具只是为了切换到一种新语言是不切实际的,特别是当这种切换可能会引起很多麻烦时.
我会说,尽管其他答案指出主要由JVM引起的速度不足,人们不用Java编写游戏的真正原因是缺乏对DirectX和OpenGL等环境的支持(这实际上消除了需求)因为你的代码接近他的硬件,因为它是由一些答案建议的).它们是人们通常用来编写游戏的基础框架,特别是现在3D游戏无处不在 - 而且缺乏对它们的支持是Java不被视为游戏开发语言的原因.
为了强调我的观点,我建议你看看微软的XNA,它目前已经过优化,可以通过.NET框架在C#中进行编码(就像Java是Just-In-Time-Compiled并且本身并不是本地运行的).与DirectX的XNA框架接口其中谈到硬件,所以它是非常快的.
编辑
@Ed Swangren的评论让我意识到在考虑进行游戏开发时,.NET与Java之间的另一个区别.我认为.NET的另一个优点是,如果你确实需要能够挤出最后一点性能并做一些指针数学或实现复杂的高性能算法,那么由于不安全模式,它会更加容易.当然,您甚至可以超越它并编写本地库以供C#代码使用,这要归功于P/Invoke.