什么是最跨平台友好的编程语言?

4
假设我想创建一款FPS游戏,比如克隆Crysis,这样每个人都能理解我想要的图形和性能类型。那么写这个游戏的最佳代码是什么,以便尽可能轻松地将其移植到所有常见平台上?当然,我希望应用程序在平台上感觉和本地应用程序一样。这也意味着应该很容易利用Snow Leopard的新功能(如OpenCL)和Windows 7的新功能。我知道GUI必须分别为不同的平台编写,但这不是问题。
所以我的问题是:哪种语言最适合这项工作?我不是在寻找一种通用解决方案,而更像是核心语言。我想说的一种方式是,如果您需要将同一程序移植到Windows、OS X和Linux上,最好的语言是什么?Java不在考虑范围内。

3
为什么不考虑Java?我认为Java使用JOGL是一个很好的选择。如果你认为它很慢,那么你误解了多年前的Java;如今的Java凭借HotSpot VM技术已经接近本机速度了。 - Ricket
11个回答

20

C语言(现在加一些填充以达到15个字符)


4
是的,C语言可能比C++或其他语言更易于移植,但他可能也希望在不到10年的时间内完成游戏,所以我不建议使用C语言。通过使用比C更友好的语言,您可以节省比使用C更多的时间,与使用C节省的半年相比微不足道。 - Roman Plášil
Roman,你说得很对,因为我是有经验的PHP编码人员,但我只了解C语言的基础知识,所以这也是一个学习过程。你能推荐其他语言吗?未来它会很容易“移植”吗? - Jim
我会推荐熟练掌握C++,并利用它提供的便利来简化开发。虽然Java有其问题,但我不排除使用它的可能性。 - Roman Plášil
3
C语言并不差 - 我曾经编写了运行在Win16和主机上的C代码 :)。但我同意其他评论者的意见:C++是一种更好的方式,可以跨平台实现可重用的代码。另外请查看Qt(http://qt.nokia.com/products/)作为跨平台UI解决方案 - 最新的SDK甚至应该具有跨平台的IDE。 - Traveling Tech Guy
像Crysis这样的游戏中,UI的价格是多少?也许只有2% - 在关卡编辑器中。 - Roman Plášil

12

你看过电影《布鲁斯兄弟》吗?在电影中,杰克和艾尔伍德进入一个乡村酒吧表演,并询问女招待喜欢什么样的音乐,女招待回答道:

我们有两种:乡村音乐和西部音乐。

这与本题有何关联呢?嗯,你想创建高性能的3D图形,想知道使用哪种语言?

我们有两种:C和C++。


是的,尽管我更喜欢像Python或Javascript这样更动态的语言,但如果你要编写现代FPS游戏的核心,除了C/C++之外别无选择,特别是如果OP需要边学边做(这意味着使用现有的库和示例,其中大部分将是C++)。 - Kylotan

3

C++。您可以避免使用数百万个“if #define”来处理平台相关的事情,而是使用继承(为每个平台派生一个类,并且客户端使用/了解抽象基类)。对于性能关键部分,可以做出一些例外。

此外,还有许多用于跨平台开发的库。


3
您可能需要使用C语言来提高图形性能,建议使用Visual C++支持的C89变体或MinGW和gcc C99。在C99代码中,VC ++ 2008不支持循环中的声明,这非常令人恼火,但是在多年的C ++中他们没有正确地做过这件事。
值得承认的是,如果您将GNU与自己的GUI全屏运行,则它实际上不再是跨平台的。
您还可能需要使用Lua、Python或另一种脚本语言,并与调用C语言协作,以提供一种合理的控制游戏的高级方法。

2

对我而言,Java可能是最容易学习的语言之一。但Java在图形系统方面表现不太出色,如果你要编写“游戏”,需要更多的代码来支持图形显示,但如果你要编写网站,请选择JavaScript、CSS和HTML/5中任意一种或两种语言进行编写,通常最好选择适合自己的语言……=)对于初学者而言,如果要编写FPS游戏,我建议使用Java,如果你对自己想创建的东西有很好的想法,并且它是一个更复杂的游戏,那么可以选择C#或C++,因为它们使用较少的硬件,可以制作出运行在多平台上的更复杂的游戏。


2

我强烈推荐使用Lua进行脚本编写。它是一个ANSI C库,这意味着:一、它可以在(至少大多数)C ++编译器中编译;二、如果平台上有C编译器,则可以使用lua。它允许显著扩展您的游戏灵活性,并且如果您愿意,它还可以让您的玩家自定义它!


1

无论你使用什么,你都需要编写特定于平台的代码。像Java或其他解释性语言(Python是我个人偏好)这样的语言将允许您使用许多共同点。但是,由于这不是一个快速简单的项目,我建议使用C或C++。

编辑:GUI不一定必须为每个平台从头编写。请查看wxWidgets


非常感谢您的回答和wxWidgets链接。 - Jim

1

大多数跨平台游戏都是用C++编写的,因为它在性能方面非常出色;而且比C更用户友好。游戏需要最大的速度和效率!

您可以将特定于平台的内容隐藏在某些抽象和API之后,以便轻松移植。您还可以使用跨平台框架,例如Qt或wxWidgets来处理窗口和GUI元素。在非关键部分添加脚本语言也很不错。:)


0

正如许多人在这里指出的,最终你几乎肯定会需要C/C++来满足你的图形需求,尤其是高性能(图形)要求。

然而,也许有机会用脚本语言开发“核心”,并且该脚本语言可以轻松嵌入到C/C++应用程序中。这种情况下,你可以考虑使用Lua和Tcl这两种顶级脚本语言。

特别是Lua,它在《魔兽世界》等游戏中被广泛使用。而Tcl则有更多“内置电池”(库)。


0
我也推荐C++用于大型跨平台项目。但我认为同样重要的是你所使用的构建工具。例如SConsCMake可以为Windows/Linux/MacOS下的大多数编译器创建项目文件/Makefile。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接