当前位置: 首页 > 面试题库 >

为什么只有少数几个用Java编写的视频游戏?

督德泽
2023-03-14
问题内容

为什么没有很多用Java编写的商业3D视频游戏(不是随机开放源2D游戏)?从理论上讲,这很有意义:您几乎免费地获得了生产力的提高和一个跨平台的应用程序,其中包括大量的Java库和内置的垃圾收集器(尽管我承认我我不确定后者是否是一件好事。那么为什么很少使用它呢?我只能想到为Java平台编写的几个流行的商业游戏。

是因为性能吗?如果是这样,GPU难道不是大部分的繁重工作吗?


问题答案:

游戏开发世界是一个有趣的世界:一方面,他们通常很快就会接受新的想法,另一方面,他们仍然处在僵局。

事实是,切换到.NET / Java /除C / C ++之外的任何东西的动机很少。

大多数游戏公司从其他公司获得游戏引擎的部分许可。这些部分是用C ++编写的,尽管您可以访问源代码以便移植,但是这需要花费很多精力(当然,许可证需要允许它)。

同样,C
++中已经存在许多旧代码。如果以前项目中的代码可以重复使用(例如,如果您要编写续集),则更重要的是坚持使用相同的语言,而不是用新的语言重写(因为这样很可能会重新引入)大量的错误,您需要花费一些时间来解决。

最后,无论如何,用100%C ++编写游戏都是很罕见的-
使用脚本语言可以完成很多工作,无论脚本是自定义的,还是只是集成现有的语言(Lua如今都是最受欢迎的语言之一)。

就垃圾收集而言,这可能是个问题。问题不仅仅在于它存在,还在于它是如何工作的-
垃圾收集器必须是非阻塞的(或者至少保证仅非常短暂地阻塞),因为将游戏冻结10秒钟是不可接受的,它会扫描所有分配的内存,以查看可以释放的内容。我知道Java在接近用尽内存时(在某些游戏中,它会)会在GC’ing中阻塞很多。

您的工作也受到更多限制:由于运行时的开销,您无法充分利用硬件。想象一下Crysis是用Java编写的……即使这是唯一可见的区别,也不会是相同的(我也很确定您需要Core
i7来运行它)。

这并不意味着这些语言没有在游戏开发中占有一席之地-不,我不仅指工具编程。对于大多数游戏,您不需要C
++带来的额外性能(包括3D游戏),而且如果您是从头开始编写所有内容,那么使用XNA之类的东西就很有意义了-实际上,很有机会。

就商业游戏而言-RuneScape算在内吗?那很可能是最成功的Java游戏。



 类似资料:
  • 问:为什么我只收到以下使用 YouTube Data V3 API 执行的操作中的 1 个视频?我尝试从中提取视频的示例频道(https://www.youtube.com/user/JayLenosGarage/videos)有多个视频。 我正在尝试从特定频道的Youtube数据API v3中获取所有视频及其关联的ID。让我们使用示例通道JayLenosGarage。 所以关注YouTube上的

  • 问题内容: 关于Cassandra的 问题 为什么世界上有人会用Java编写数据库ENGINE? 我能理解为什么您要有一个Java接口,但要有一个引擎… 我给人的印象是,没有什么比C / C ++快,而且数据库引擎不应比最大速度慢,而且当然不使用垃圾回收… 谁能解释给我一个什么可能的含义,为什么Cassandra可以比在C / C ++代码上运行的普通SQL更快? 编辑: 很抱歉“为什么要死在地上

  • 我使用aws lambda处理帧,它生成png图像序列作为输出。我想把这些处理过的帧推送到amzaon Kinesis-video-stream。用Java怎么做?

  • 只是想知道是否有人能告诉我这是怎么回事。当我播放视频时,我可以听到音频,但视频不显示。这是我的代码,我是初学者

  • 问题内容: Sun 用什么语言写? 问题答案: Sun实际上有多个JVM。所述热点JVM在C ++主要被写,因为热点在很大程度上基于所述Animorphic Smalltalk的VM被用C ++编写 。 比HotSpot更有趣的是IMHO Maxine Research VM ,它几乎完全用Java编写。

  • 更新:改变了这个问题的标题以反映我想要的 我希望使用.htaccess将所有目录中的所有文件视为参数,但/public/目录及其所有子目录中的所有文件除外。 null