当前位置:  开发笔记 > 编程语言 > 正文

用于游戏编程的C与Java

如何解决《用于游戏编程的C与Java》经验,为你挑选了4个好方法。

我知道C++通常被认为比游戏更好(至少是大型游戏).为什么是这样?

是什么让Java在这个领域保持竞争力?反对使用Java进行游戏编程的原因最多,哪些是神话?

编辑:我对C/C++有点不熟悉,并没有想到在第1行区分两者.<



1> Sam Harwell..:

之前Java(和C#/ .NET)不是AAA标题的可行选择的原因是已建立的游戏引擎和它们的工具链是用C++编写的.游戏开发就是在最短的时间内获得市场上的头衔,并且预算不允许在新的语言/引擎已经可用,工作良好以及拥有大量编辑器之类的东西中捣乱和支持他们的工具.

迁移到Java(或C#)还需要在big-3(PC,X360,PS3)或big-5(添加Wii,iPhone)上使用新的性能驱动的JVM(或CLI).它在技术上可行,但在经济上不可行.

编辑:对虚拟机和游戏引擎的当前状态都有低级知识的任何人都可以告诉您,JVM或CLI无疑可以通过新的游戏引擎实现,以超越当前C++引擎的性能.预防因素是时间和金钱,仅此而已.


+1 - 您的编辑似乎是任何实际搞砸了JVM速度的人的唯一答案.
你会惊讶地发现有多少游戏*工具*是用java编写的 - 尤其是自定义内部工具.Java更容易编程,游戏工具不需要游戏所需的裸机速度,因此Java是一个不错的选择.

2> xyz..:

传统上用于游戏的高性能和C和C++的惯性.

除非你正在进行3D狂欢,否则选择基于表现并不是一个重要的优先事项.


好吧,Java并不容易为您提供某些游戏所需的低级访问权限.另外,不要忘记控制台平台.
惯性可能是这里最重要的事情.Java可以非常快,大多数游戏都受GPU限制.
FWIW,你甚至不能在PS3,XBOX-360,Wii,PSP,GBC等上发布用java编写的游戏.它不是惯性,它只是*NOT**允许*.

3> Ed S...:

因为:

    Java未编译为本机代码,这意味着在第一次运行代码时会出现性能损失.

    Java没有给你一个可预测的内存模型(控制台游戏需要这个)

    Java没有给你确定性的对象终结.

    Java并不像C那样接近硬件,这对于许多专业的3D游戏编程来说都是必不可少的.

    控制台程序员可能没有在PS3,X-Box等上运行的JVM.

    运行时性能损失.

    您将永远无法使用C++应用程序从Java应用程序中获得尽可能多的性能.

可能有更多的原因,比如它们使用的是用C或C++编写的预先存在的代码.

编辑:顺便说一句,我认为很多现代游戏都不是用C语言编写的.OOP适合游戏开发,而C++是事实上的选择语言.

此外,我不会将它添加到我的列表中,但正如其他人所提到的那样,有许多预先存在的代码可以很好地用于游戏行业.重写所有/大多数工具只是为了切换到一种新语言是不切实际的,特别是当这种切换可能会引起很多麻烦时.


C++!= OOP.它是一个可以促进OOP的工具.您可以在C++中编写过程代码,就像在C中编写面向对象的代码一样多.
JIT确实将字节码编译为本机代码并在运行中对其进行概要分析.原则上,JIT编译的本机代码比提前编译的代码更快,因为JIT可以基于配置文件信息进行优化,而AOT编译器则不能.你的第6点和第7点含糊不清,什么都不说.
BestGameEver,Quake III Arena,用C :-)编写
@Jesper,许多优秀的C/C++编译器都支持配置文件驱动的优化.我做Windows开发,MSVC和intel都支持它.如果JIT配置文件优化编译比AOT编译快,那么我将在当前项目中使用java版本的libsvm.在测试中,我发现它慢了4倍,使用了3倍的内存.
除了第4点,我发现你的点列表相当模糊或无关紧要.
嗯...究竟是什么模糊或无关紧要?我相信它们都非常相关和清晰.

4> Mike Dinescu..:

我会说,尽管其他答案指出主要由JVM引起的速度不足,人们不用Java编写游戏的真正原因是缺乏对DirectX和OpenGL等环境的支持(这实际上消除了需求)因为你的代码接近他的硬件,因为它是由一些答案建议的).它们是人们通常用来编写游戏的基础框架,特别是现在3D游戏无处不在 - 而且缺乏对它们的支持是Java不被视为游戏开发语言的原因.

为了强调我的观点,我建议你看看微软的XNA,它目前已经过优化,可以通过.NET框架在C#中进行编码(就像Java是Just-In-Time-Compiled并且本身并不是本地运行的).与DirectX的XNA框架接口其中谈到硬件,所以它是非常快的.

编辑

@Ed Swangren的评论让我意识到在考虑进行游戏开发时,.NET与Java之间的另一个区别.我认为.NET的另一个优点是,如果你确实需要能够挤出最后一点性能并做一些指针数学或实现复杂的高性能算法,那么由于不安全模式,它会更加容易.当然,您甚至可以超越它并编写本地库以供C#代码使用,这要归功于P/Invoke.


是的,直到你写了一个严肃的游戏并发现你需要更多的FPS,但是......哎呀,你不能控制代码做真正的工作.
谷歌LWJGL也已经商业化使用,速度非常快.如果有人编写它,Java可以链接到DirectX - 这只是Java跨平台的主要原因 - 而DirectX则不是.
有opengl的java绑定.谷歌"jogl".
现在这个主题稍微偏离了主题,但http://www.jmonkeyengine.com/对于那些对业余爱好感兴趣的人来说是一个很棒的java 3d工具包.
推荐阅读
乐韵答题
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有