我不是游戏开发者,也不是任何人,但是我知道Java在游戏开发中的使用并不广泛。Java对于大多数游戏来说应该足够快,所以要抓住什么呢?我可以想到一些原因:
- 缺乏具有Java专业知识的游戏开发人员
- 缺乏良好的游戏开发框架
- 程序员不想接受Java作为游戏编程语言。大多数人只接受C ++吗?
- 不支持游戏机(尽管PC市场仍然存在)
当然可以是其他东西。谁能比我更好地了解这个业务,可以解释一下为什么Java在游戏开发方面没有发展势头吗?
我不是游戏开发者,也不是任何人,但是我知道Java在游戏开发中的使用并不广泛。Java对于大多数游戏来说应该足够快,所以要抓住什么呢?我可以想到一些原因:
当然可以是其他东西。谁能比我更好地了解这个业务,可以解释一下为什么Java在游戏开发方面没有发展势头吗?
Answers:
几个原因:
如今,Java主要用于Android游戏,这仅仅是因为Java是该平台的主要语言。
malloc
或也是不可能的new
,因此,如果您担心的话,无论如何都将实现池化。与此无关,Java的一个大问题是它不支持值类型,这与C#不同。
技术原因:
非技术原因:
有趣的是,游戏开发人员应考虑使用Java的一些充分理由:
好的,此线程中存在很多错误信息。
我从事游戏行业已经25年了,对此我非常了解。我还非常了解游戏中的Java,因为他曾是Sun的Java Game技术推广人员并讲授Java性能编程专家。
在计算速度方面,Java在当今的许多科学计算基准中都击败了C ++。您可以用任何一种语言编写病理代码,如果您愿意,它们会导致性能下降,但总的来说,它们是同等水平的,并且使用了很长时间。
在内存使用方面,Java确实有一些开销。HelloWorld是Java中的4K程序。但是,在当今的多GB系统中,这些开销是毫无意义的。最后,Java确实有更多的启动时间。我不建议将Java用于短时运行的实用程序,例如Unix命令行命令。在这些情况下,启动将主导您的性能。但是,在游戏中,它的意义并不大。
正确编写的Java游戏代码不会遭受GC暂停。就像C / C ++代码一样,它确实需要一些活动的内存管理,但不需要C / C ++的级别。只要您将内存使用情况保留给长期存在的对象(在整个关卡或游戏中一直存在)和非常短暂的对象(矢量等,在计算后传递并迅速销毁),gc就不会是一个明显的问题。
在直接内存访问方面,Java拥有很长一段时间了。从Java 1.4开始,采用本机直接字节缓冲区的形式。由于缺少无符号整数类型,Java中的位纠缠可能会有些烦人,但是工作回合都是众所周知的,并且并不是很麻烦。
尽管其真正的Java从来没有Direct3D绑定,但这是因为Java技术努力实现可移植性。它具有两个OpenGL绑定(JOGL和LWJGL)和OpenAL绑定(JOAL),以及一个可移植的输入绑定(JInput),该绑定在幕后绑定到Windows上的DirectInput,OSX上的HID Manager和Linux绑定(我忘记了)。
确实,没有完整的游戏引擎像Java那样具有Java的特色,而C#却没有特色。另一方面,有两个很好的Scenegraph级别的APIS,它们可以在Windows,OSX和Linux上完全平台移植。两者均由Josh Slack编写,第一个称为JMonkey引擎,第二个称为Ardor3D。
最正确的说法是,在游戏开发中阻碍Java发展的两个最大因素是偏见和可移植性。后者是最大的问题。尽管您可以编写Java游戏并将其发布在Windows,OSX和Linux上,但从来没有控制台VM。这是由于Sun中层管理人员完全没有能力。实际上,我们中少数在游戏中从事Java开发的人与索尼达成了至少3次与Play达成交易的协议,以便在Playstation上获得虚拟机,而Sun中层管理人员却三度将其杀死。
当Sun调情客户端技术时,事实是Sun管理层从未获得过消费产品。这就是为什么Java作为Sun的客户端语言从未以任何形式成功的原因,以及为什么需要Google和Dalvik(类似于Android Java的VM)来使Java在任何地方都获得成功。
这就是为什么我今天用C#编写游戏。因为Mono到了Sun管理层拒绝的地方。
Java非常适合必须可靠运行的业务逻辑,服务器和独立于平台的代码。Java在游戏中不经常使用的原因有几个:
使用字节码语言(例如Java(编写JNI层)和.net(大量的编组/解组,api /结构属性))的C ++库并不容易。因此,它增加了很多工作,却收效甚微。
附带说明:一些游戏服务器使用Java。
类似的帖子在这里:https : //stackoverflow.com/questions/1034458/why-arent-video-games-write-in-java
Java对于大多数游戏开发来说不够快。它比使用标准的C ++ / Assembly慢得多。这也是没有使用C#或VB完成更多游戏开发的原因。游戏开发人员需要并计划每个最后的时钟周期,以便他们可以进行物理计算,AI逻辑和环境交互等操作。
对于更简单的游戏,可以非常有效地使用Java。如果您想创建一个Tetris克隆或Bejeweled,或其他细节级别的东西,那么Java可以正常工作。但是Java不可能创建Halo,荣誉勋章,Command&Conquer等游戏并使其可玩。至少与现在一样。
您在问题中列出的原因也是有效的。我认为,除了缺乏具有Java专业知识的游戏开发人员外。手机和其他便携式设备上的许多游戏都是用Java编写的(包括大多数Android游戏),其中一些游戏非常出色。因此,我认为拥有Java知识的游戏开发人员的基础正不断壮大。
人们正在改变在一些更高级的游戏中使用这些高级语言的能力。例如,我最喜欢的游戏之一,Auran的Train Simulator,是用C#编写的大部分内容,效果很好。因此,基础不断扩大,并将继续发展。
现代游戏都是关于在专用硬件中发生的3D图形的。
甚至早在2002年,Jacob Marner就在他的报告“评估Java以进行游戏开发”中发现,Java除了对性能最依赖的部分外,还非常适用于游戏,并且由于语言和底层JVM的健壮性使其更便宜。用这种方式做到这一点。
http://java.coe.psu.ac.th/FreeOnline/Evaluating%20Java%20for%20Game%20Development.pdf
我个人认为,自从那时以来发生的进步,尤其是在3D图形方面,以及与OpenGL等人的出色绑定,这种劣势如今已经不那么明显了。
因此,问题一定在其他地方。可能的原因是Java运行时的大小(如今,在多DVD游戏中这已不再是一个大问题),而另一个原因是现有代码的惯性。众所周知,开始使用Java本机代码非常困难。第三个原因是从事游戏的明星开发者所熟悉的。第四是平台上是否有Java。
可以肯定的是-大多数游戏正在开始成为可编写脚本的脚本,而不是一开始就将它们全部刻录为C代码,并且您希望在脚本语言下获得最佳运行时间。如今,这实际上意味着CLR或JVM。
我认为对于大多数人来说,限制因素是(缺少)优质游戏引擎的可用性。为了走得更远,我们需要看看为什么这些都不可用。
我会从另一个方向看一下。开发游戏引擎(例如)需要大量工作。谁能从开发一个人的时间和精力上受益呢?
在Java中/针对Java进行类似框架的开发的大多数明显候选人(例如IBM,Oracle)似乎对游戏的兴趣为零。游戏开发的明显候选人(例如Id,EA)似乎对Java几乎没有兴趣。
我能想到的似乎唯一合理的候选人几乎就是Google。Android的主要开发语言是Java,鼓励开发Android游戏可以为该平台带来真正的优势。
据我所知,他们还没有这样做(还?),这对几乎其他任何人都留下了相当严格的限制。在现代高性能游戏引擎中使用Java开发几乎没有什么办法,这意味着要付出很多额外的工作,(在我看来,这)产生很多收益的机会不大。
Java不是在考虑游戏开发的基础上开发的,而是Java被认为是一种“面向Web”的语言。
至于游戏开发,在Microsoft支持C#的情况下,Sun并不真正支持Java作为游戏开发语言。
我认为缺少令人信服的游戏开发框架是在这方面真正杀死Java的原因。
当然可以是其他东西。谁能比我更好地了解这个业务,可以解释一下为什么Java在游戏开发方面没有发展势头吗?
这是一种解释语言,即慢。您正在处理作为硬件的图形和图形卡。什么是处理硬件的好语言?C ++,它相当低,您可以处理指针等。
如果您想抽出疯狂的图形(例如孤岛危机)以及您不打算为此做的Java。
不仅如此,Oracle拥有Java,而且公司可以起诉您的想法并不太好。尤其是当您要为JAVA构建自己的解释程序以针对游戏而不会因碎片化的FUD而受到起诉时。