Java是否适合进行认真的游戏开发?[关闭]


64

我已经在Internet上进行搜索,但是Java游戏开发的资源并不多,几乎不及C ++。实际上,大多数引擎都是用C ++编写的。我试图玩用jMonkeyEngine制作的游戏,但是游戏速度非常慢,以至于我的计算机死机了。我没有其他Java应用程序在运行,也没有占用太多资源。相反,我的计算机可以轻松玩大多数现代3D游戏。如果我现在继续学习和改进Java,事实证明以后需要学习C ++,那么切换可能会很困难。

Java是否可以用于认真的游戏开发?认真地说,我的意思是高质量的图形,而在现代计算机上没有太大的滞后。我也想考虑为游戏机制作游戏。


25
我的世界不是用Java构建的吗?还是主要是OpenGL?哦,如果您不是对Java的100%设置,请查看C#,因为它很棒。
Aralox 2012年

7
为什么不参加Stack Overflow C ++聊天?我们喜欢C ++,我们认为它绝对可以正确使用,并且我们知道该怎么做,并且我们非常乐于分享。
DeadMG 2012年

12
Minecraft是Java + LWJGL + Notch的编码技能,因此在性能方面非常糟糕。
MLProgrammer-CiM 2012年

3
无论您是编码游戏还是任何其他游戏,将自己锁定为一种语言都不会对您将来有所帮助。分支一下,可以使用C ++或其他类似Python的工具。这需要时间,但可以使您成为更好的开发人员。
loganfsmyth 2012年

4
您会得到很多错误的信息,因为Java / C ++战争大火燃烧,准备在接受意见之前询问具体示例,还需要您自己进行更多研究=)话虽如此,我同意@loganfsmyth您将需要了解多种语言,因为只有这样您才能为任何任务选择正确的工具。在不久的将来,如果您只想学习“游戏风格编程”,请使用您熟悉的(Java),然后再学习C ++。哎呀,稍后您可能正在用C#和Java ME中进行游戏中的内容管道,很难预测=)
Patrick Hughes

Answers:


54

是的,请检查此列表以获取证明。这些是使用轻量级Java游戏库(LWJGL)用Java制作的一些游戏。它是一个低级框架,为高质量的图形提供OpenGL,为声音提供OpenAL。它还提供输入API。有了这些,您就可以轻松地开始使用Java进行认真的游戏开发。

我目前正在使用Java的业余爱好项目来编写第二个3D游戏,我很喜欢它。过去我曾经用C ++编写游戏,但是切换到Java之后再也没有回头路了。用Java支持多种操作系统非常容易,例如我以前在Windows中开发了一年的Java游戏,它在Linux和OS X中都可以立即运行,并且只有一个错误,而无需在这些平台上进行任何编译。

另一方面,使用Java会遇到很多问题。

  1. 垃圾收集器。正如其他人所述,不确定性的内存管理是一个问题,您需要记住这一点。
  2. 缺乏第三方图书馆。大多数可用的库不支持Java。另一方面,您始终也可以选择从Java调用这些本机库,但是这样做的工作量更大。对于流行的库,还有Java端口或现成的包装器可用,例如,我正在使用Bullet Physics Library的JBullet-Java端口。另一方面,Java内置了一个巨大的类库,从而减少了与游戏无关的第三方库的需求。缺少库对我来说不是问题,但我可以想象对其他人来说也是如此。
  3. 流行的游戏机不支持Java,据我所知,并没有轻松地从Java切换到Java的方法。另一方面,Android是一种流行的移动平台,它使用某种形式的Java。这也是一个选项,但是除了可以在PC和Android设备上运行的相同Java代码外,别无其他选择。
  4. 较小的社区。大多数游戏程序员使用C ++,以我的经验,他们通常不喜欢Java。不要期望从别人那里得到太多帮助。没有C ++技能,不要指望从事游戏开发工作。

40

并不是的。事情就是这样:首先,与C ++ 几乎所有内容相比,Java的现有库几乎没有

其次,Java作为一种语言根本无法很好地促进游戏开发;例如,我的意思是,如果您要处理GPU缓冲区,那么Java不会提供语言功能来帮助您确保正确锁定并锁定它们。解锁或处置,C ++可以做到。此外,还有性能问题-GC是不确定的,这对游戏来说是超级糟糕的。

我从未见过任何非独立游戏花费大量时间使用在执行之前未编译成本机代码的语言,甚至独立游戏也很少见。因此,我现在的信念是根本无法做到。

另外,如果我现在继续学习和改进Java,结果后来又需要学习C ++,那么转换将会很困难吗?

是的,绝对会。尽管Java和C ++ 的表面语法相似,但它们却有很大不同。学习C ++时,Java经验几乎不起作用。

图形游戏一个可行的选择,您可以在Terarria和Minecraft等游戏的成功中看到它。但是,如果您打算创建srs图形,则在Java中将无法实现。


6
由于他指定了沉重的图形,所以+1,可以快速进行游戏而不会出现延迟。
约书亚德雷克2012年

1
Java缺乏无符号数据类型也对此表示反对。是的,您可以解决它,但这不是理想选择,并且您将使用无法真正正确反映基础数据的代码。
Maximus Minimus 2012年

@deadmg是锁定还是未锁定的情况,您是指某些DirectX api功能吗?&你能告诉我,拥有不确定的GC有什么不好的地方。
Quazi Irfan

非确定性GC可以等同于丢帧,如果您停顿得很糟糕,世界停顿了,它可以将帧锁定的时间比渲染帧所需的时间更长。实际上,如果您计划使用内存,这种情况并非经常/永远不会发生,可以将JVM的收集器配置为低暂停(处于帧丢失的安全限制之内)。尽管如此,这仍然不是一件有趣的事情。您最终不得不退还离开C ++时获得的大量生产力。
2012年

2
首先,您必须完全重写。
DeadMG

25

因此,我对游戏开发真的很认真,Java仍然是可行的选择吗?我已经尝试过多次学习C ++,但是我真的不喜欢这种语言。我真的不知道为什么,但是通常,每当我尝试学习时,我都永远无法掌握这些主题。

如果您选择Java的原因是您不懂C ++,那么您的Java程序就不会足够快地获得高质量的图形。使用高级语言应该是因为它可以提高您的生产力,而不是因为您不能理解低级语言。

我认为用Java编写游戏并不是一个坏主意,特别是如果游戏很简单,但是如果将它用作拐杖,您将立即遇到Java性能问题。

简而言之,对于认真的游戏开发,可以认真考虑Java。这包括沉重的图形,快速的游戏而不会出现滞后,并且可能,并且易于切换到控制台吗?

  1. 沉重的图形:可能,但是在Java / LWJGL中将与在C ++ / GL中进行相同的操作:将字节写入GPU缓冲区和/或使用Minecraft弃用的显示列表。如果您不了解内存管理,那么您也将无法正确执行此操作。

  2. 快速游戏而不会出现延迟:无论使用哪种语言,这都不是一件容易的事,而且您更有可能以任何一种方式射击自己的脚而无需考虑。

  3. 不,Java在控制台上将不可用。


附带的问题是,不推荐使用什么替换显示列表?
Suds 2012年

@Suds:我相信是可编程的管道。
DeadMG 2012年

哈!已经覆盖了它。VBO
Jimmy

移动平台可以被视为控制台。我意识到他可能在谈论三巨头,但是Android使用Java并为此创建了很多游戏。
Amplify91 2012年

1
@ Amplify91是的,一些游戏是用Java编写的。但是,大多数好的游戏以及可能所有的图形密集型或多平台游戏都是使用Android NDK用C ++编写的。
郊狼2012年

15

经验丰富的程序员通常会知道许多编程语言-一旦您了解一种语言,学习额外的编程语言就不会太困难。但是,我强烈建议C ++不应该是您的第一语言,也可能不是第二语言。

这是因为C ++通过不执行任何重要的运行时错误检查而获得了很大的效率。例如,在Java中访问数组末尾的元素将始终抛出异常,告诉程序员确切的错误所在。在C ++中,您可能会很幸运,它会立即崩溃,但是在很多情况下,它会无声地丢弃其他数据,并且直到很晚才显示错误

我建议您暂时坚持使用Java(或者如果愿意,可以改用C#)。这样一来,您可以比使用C ++更快地完成工作,并且在PC上的性能也不是问题。

用更安全的语言完成一些项目后,请考虑学习C ++。大多数专业游戏开发工作都需要C ++。

请注意,除了C#/ XNA之外,至少要将您编写的游戏写到控制台上,需要您建立一家有办公室的公司,并有大量预算可用于开发硬件和其他费用。


这也异常正确,因为C ++以外的其他语言将带给您成就感。C ++可能要花费数百小时才能让您感觉不到。首先学习其他语言,可以让您wet脚。
Darkenor

您对缺乏错误处理的评论实际上是关于C的(以及实际上就是C的所谓C ++代码)。C ++具有标准库(和标准模板库),它们的错误处理比您描述的要好得多。C ++还具有供应商提供的库(例如MFC),可提供体面的错误处理。
贾斯珀(Jasper)2016年

9

免责声明:这不能完全回答您的问题。但是,我试图(简短地)提及您可能感兴趣的一些观点。

之所以对C ++如此之多,是因为C ++仍然是行业标准-控制台等最常用的语言。

Java不经常使用。我的世界(Minecraft)是一款非常受欢迎的游戏,它通过Java使其发展壮大。但是图形效果不是很好。螺旋骑士还不错-也是用Java制作的,具有出色的图形。

如果您喜欢Java,则C#的语法非常相似,其优点是可以与C ++互操作-因此,如有必要,可以在C ++中完成低级操作。Unity可以使用C#编写脚本,而XNA是一个很好的选择。

同样,Java没有被广泛使用。如果您喜欢样式和语法,我想您会发现C#是非常相似,非常令人愉快的编码体验。

希望您的梦想成真,一路上很有趣:)


8
这个帖子中有很多错误。Minecraft的“不良”图形与该语言无关(严重)。MC的不良表现与Java是游戏的不良语言直接相关,因为存在巨大的性能问题,而LWJGL出于同样的原因也不适合用于大型编码项目。但是最大的原因是Notch的编码和实现不佳,正在缓慢地修复它。C#为您提供了所有托管内存,而没有大多数Java性能问题。缺点是C#在游戏和应用程序方面都以Microsoft为中心。
MLProgrammer-CiM 2012年

2
@EfEs:我不希望将它透露给您,但是托管内存对游戏来说是可怕的,用XNA编写游戏的人比用C ++编写代码的人必须花费更多的时间来管理内存。GC的不确定性意味着您必须实际上汇集所有内容,并避免像瘟疫一样分配资源,而不是使用该语言的方式。
DeadMG 2012年

这个答案并不意味着100%准确;我只列举了我隐约知道的例子。随时使用DV。
ashes999 2012年

2
@DeadMG我知道要走C ++,我只是想解释一下C#在游戏方面比Java更好。
MLProgrammer-CiM 2012年

5
作为一个长期的C#开发人员(不是游戏开发人员),我认为对于任何设计不良的系统,池化和内存管理都是大问题。据我所知,具有C / C ++思维方式和开发方式的人几乎不会陷入必须使用的托管内存,设计和体系结构模式,并以Java / C#这样的语言来利用它们。我要说的并不是C / C ++技术或产品不好,而是即使您在语法方面使用了更简单的语言(例如Java和C#),您仍然需要大量的经验来设计正确的游戏方式。
Ivaylo Slavov'3

3

这不能回答您的问题;图形和控制台问题似乎是您非常需要考虑的问题。GC也影响性能。但是我写的是:

如果要编写大型,复杂的OO程序,那么用Java编写它们的速度将比使用C ++快5倍。而且,维护将非常容易。我切换了(对于非游戏软件来说是公认的),而我的工作效率却飞速增长。C#,另一个很好的替代方法,比Java难学习,因为它有更多的东西。当您知道它时,您可以比在Java中更快地编写代码。它为您提供了很多技巧。但是,我发现这些技巧会使维护变得困难。然后是Java文档,该文档有助于Sun库您自己的旧代码。C#完全不喜欢它。

我用Java编写了一个大型的毛茸茸的游戏,发现语言是完美的,但是我的图形很基础,而且不是射击游戏,十分之一秒对玩家来说是永恒的。另外,我希望以后再增加很多,而我认为大多数人只是去写一个全新的游戏。


3

看花花公子,简单的答案为“是Java的可行的游戏开发”是一个明显的肯定。您可以使用任何编程语言来制作游戏。那并不意味着你应该

如果您想最有效地利用计算机资源,那么可能会使您不了解C ++的东西(低级内存管理,无垃圾收集器,必须注意指针,结构作为数组等)。。如果您最有效地利用计算机资源,则游戏将运行最佳。

Java所做的某些事情(例如数组边界检查)只会使其运行速度变慢。在经过优化的Java Perlin噪声示例代码中,作者评论说“(数组访问比成员访问慢很多)”。这种事情来自C ++背景,非常直观。但是在Java中,确实如此。

我说停止躲开项目符号,学习C ++,并使用它。


1

在可以接受计算机科学的正规教育(学士学位?)之前,您应该以最了解的语言来做,以强调游戏设计。 您可以使用您的游戏获得奖学金,特别是如果您可以说“我没有经过Java正式培训就做到了”

现代的JVM,甚至是Oracle的JVM,都具有许多功能,可以解决人们在这里提出的问题。您可以使用不同的垃圾收集器来获得更具确定性的垃圾收集器行为。我没有3D库方面的丰富经验,只有Java3D方面的经验很少,但是这里似乎没有人抱怨它们。转义分析现在允许锁定省略,并且可以对非常短命的对象进行更快/可忽略的分配。

问题是,无论您选择的是C ++ Java,您都必须学习如何正确使用并发性,并对内存管理有很好的了解。毕竟,您可以尽可能轻松地malloc解决问题new。我不知道C ++的工具是什么样的,但是Java的概要分析工具非常易于使用,免费并且与IDE集成在一起。您可以使用它们来跟踪性能问题并学习


5
CS的正规教育对于任何学科的实际编程技能来说都是值得的。我会知道,我已经三年级了。
DeadMG 2012年

4
绝对不同意DeadMG。毕业并选择了我喜欢的课程后,CS将我的游戏开发能力从10%提高到了100%。它并没有教我UI,图像等等,而是教我真正的编码。
ashes999 2012年

2
@ ashes999:那你很幸运。我的课程毫无价值,我知道还有很多其他人也有同样的感觉。
DeadMG 2012年

2
@DeadMG在学习时很难看到。一旦您完成了几年的F / T工作,并且学习了其他免费技能,您就会发现。是的 但是也许我只是投入了很多精力,并试图将所有内容都应用到我的游戏开发者爱好中。
ashes999 2012年

1
我会说这取决于学校和教授。我有一些很棒的编程课,可以学到很多东西。而且我有一些我真正感到自己因参加而失去知识的地方。是否有一位好教授就全在于。海事组织。
Nate 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.