为什么没有很多商业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游戏了.

Java相关问答推荐

我正在try 对用户输入的整元进行气泡排序(Java)

如何在Inspaut中获取当前路径的 * 模式 *?

javafx getHostServices(). showDocument()调出Chrome而不是默认浏览器(Linux)

将linkedHashMap扩展到Java中的POJO类

JsonPath在多个线程中返回错误的值

RxJava PublishSubject缓冲区元素超时

替换com. sun. jndi. dns. DnsContextFactory Wildfly23 JDK 17

使用JdkClientHttpRequestFactory通过Spring RestClient和Wiemock读取时达到EOF

为什么Java Annotation接口覆盖对象类中的方法

解释左移在Java中的工作原理

多重延迟签名

Java17支持哪个MapR版本?

Java.lang.invke.LambdaConversionException:实例方法InvokeVirtual的参数数量不正确

垃圾回收器是否真的删除超出作用域的对象?

一对多关系和ID生成

STREAMS减少部分结果的问题

在Oracle db中,当我们提供字符串而不是数字时,比较是如何工作的?

如何在Record Java中使用isRecord()和RecordComponent[]?

Java中的发布/订阅-Long Live和Short Live Publisher,哪种方法是正确的?

Eureka客户端无法使用用户/通行证注册到Eureka服务器