发布日期:2018-03-26
为什么使用Java编写的游戏程序很少?+ 查看更多
为什么使用Java编写的游戏程序很少?
+ 查看更多
发布日期:2018-03-08 16:55
分类:JAVA
浏览次数:262
为什么没有很多商业型的3D电子游戏是用Java编写的(不包括那种开源的2D游戏)?理论上来说,用Java进行游戏的编写是很有道理的:你将可以使用一个生产力能够大大提高并且跨平台应用。几乎免费的工具,并且这个工具提供了大量的Java函数库以及内置的回收机制(虽然我承认我不太确定拥有后者是否是一件好事)。所以为什么几乎没有人使用Java编写电子游戏呢?在现实生活中,我仅仅见过几个比较流行的商业游戏是使用Java进行编写的。是因为Java的性能吗?可是如果这个原因,但是大部分的繁重的工作不都是由GPU完成的吗?
回答:
游戏世界的开发是一件有趣的事情:一方面,人们通常很快能够接受一种新的玩法,另一方面,游戏的开发制作仍然处于萌芽期。事实上,在编写游戏时,很少会有人鼓励使用除了C/C++之外的 .NET 、Java或者其他任何语言。我能看到的几个显而易见的原因是:
底层引擎的许可
大多数游戏公司从其他引擎公司获取游戏引擎(例如渲染引擎)的使用许可,而其中相关的部分便是用C++编写的。可能你拥有引擎访问源,并且想要对其进行移植,但是这需要很多的努力才能实现(当然,你还需要考虑许可证这个因素)。
大多数游戏公司从其他引擎公司获取游戏引擎(例如渲染引擎)的使用许可,而其中相关的部分便是用C++编写的。可能你拥有引擎访问源,并且想要对其进行移植,但是这需要很多的努力才能实现(当然,你还需要考虑许可证这个因素)。
遗留代码
此外,很多现有的代码都是用C++编写的。如果来自先前项目的代码可以重用(例如你正在编写续集),那么坚持使用相同的编程语言比使用新的编程语言更有利于你游戏的制作。更重要的是,使用新的语言可能会导致过多错误,那么你便需要花费时间来进行修改本来可能不会出现的问题。
此外,很多现有的代码都是用C++编写的。如果来自先前项目的代码可以重用(例如你正在编写续集),那么坚持使用相同的编程语言比使用新的编程语言更有利于你游戏的制作。更重要的是,使用新的语言可能会导致过多错误,那么你便需要花费时间来进行修改本来可能不会出现的问题。
脚本语言
最后,很少会有游戏100%的代码都由C++进行编写 – 很多是使用脚本语言完成的,无论是自定义还是集成现有的脚本语言(Lua是最受欢迎的语言之一)。
最后,很少会有游戏100%的代码都由C++进行编写 – 很多是使用脚本语言完成的,无论是自定义还是集成现有的脚本语言(Lua是最受欢迎的语言之一)。
关于JAVA和其它语言
Java的垃圾回收机制很可能是影响游戏制作的一个因素。但是这个机制存在并不是主要的原因,主要的是机制的工作原理 - Java的垃圾回收机制必须是非阻塞的(或至少保证只能是非常轻微的注释),它会扫描所有分配的内存以查看可以释放什么,所以它是完全不能接受的游戏冻结10秒。我知道当GC回收机制即将耗尽内存时,Java往往会卡住(有一些游戏就会产生这个问题)。
Java的垃圾回收机制很可能是影响游戏制作的一个因素。但是这个机制存在并不是主要的原因,主要的是机制的工作原理 - Java的垃圾回收机制必须是非阻塞的(或至少保证只能是非常轻微的注释),它会扫描所有分配的内存以查看可以释放什么,所以它是完全不能接受的游戏冻结10秒。我知道当GC回收机制即将耗尽内存时,Java往往会卡住(有一些游戏就会产生这个问题)。
你也可以使用更多的限制:但是由于运行时的开销消耗所以你不能完全利用硬件来解决问题。想象一下,如果孤岛危机是用Java编写的...这是唯一可见的不一样的区别(我很肯定你需要一个Core i7来运行这个游戏)。
但是这并不意味着其他语言游戏开发中没有自己的位置 - 我不仅仅是指工具编程。对于大多数游戏,包括3D游戏,你都不需要从C++中获得的额外的经验。如果你从头开始编写,你可以使用类似像XNA这样的好工具 – 可以说那将会是一个很好的开始。
而Java编写的商业游戏,可能不得不提RuneScape?我觉得它可能是最成功的Java游戏了。