2009-05-30 46 views
5

我发现很多辩论会反复讨论使用哪种语言来开发实时3D游戏,普遍的共识是C或C++是唯一能够为高端系统级游戏提供合适性能的语言,密集的3D游戏。我看到很多人说C#,Java或Python太慢,特别是因为垃圾收集。目标C如何? Objective C是否具有自动垃圾收集功能?除了自动垃圾收集之外,还有什么语言“太慢”或不适合3D游戏?是目标C适合3D游戏的语言吗?

这个问题可能更多的是一个'思想实验',因为我怀疑我会制定一个游戏,如此巨大的资源需要解决这些问题,但作为一名程序员,我莫名其妙地痴迷于性能,所以我仍然想知道我自己的狂热。

回答

7

Objective-C 2.0在Mac OS X 10.5上提供了垃圾回收功能,但它是可选的 - 如果您愿意,仍然可以编译Objective-C应用程序而无需垃圾回收。在其他平台上(iPhone,Mac OS X 10.5之前的版本和其他),没有垃圾回收,你必须手动管理你的内存。 Objective-C是一个严格的 C的超集,所以如果你愿意,你可以在Objective-C中编写纯C语言。因此,对于不适用于使用C的游戏,没有理由不使用Objective-C。您可以使用Objective-C提供的额外功能,只要您想要的即可。

-1

Objective-C没有自动垃圾收集。 Java有各种各样的垃圾收集方法,其中一些被设计为与游戏兼容,通过定期递增的方式进行。如果C#或其他垃圾收集器没有多种方法可供选择,我会感到惊讶,其中一些方法与游戏兼容。

我的脑海里唯一可能会让游戏不适合3D游戏的唯一方法是,如果它被解释并且执行速度特别慢。这不是你上面列出的任何特征。

P.S.为了解决你原来的问题,我敢肯定,任何拥有iPod Touch或iPhone的人都可以告诉你,Objective-C绝对符合3D游戏:)

+3

这不是我,但我敢肯定downvotes是因为Mac OS X上的Objective-C实际上具有自动垃圾收集功能。这是可选的,但它在那里。只是供参考,因为我讨厌没有教育的downvotes。 – Chuck 2009-05-30 04:21:40

5

Objective-C的唯一真正放缓其本身将是消息传递机制 - 即使如此,它通常是Cocoa框架的组件,它会减慢速度。 Objective-C的消息发送并没有真正损害性能很多。无论如何,对于大多数游戏来说,大多数性能瓶颈将来自图形代码:如果您将图形代理委托给OpenGL,这非常快速,那么使用Objective-C进行游戏确实应该没有问题。唯一可以看到Objective-C或Cocoa提供瓶颈的地方是用于密集的物理代码 - 而且这应该可以用纯C/C++编写。尽管如此,其他任何事情都不应该太重要。老实说,我敢打赌,现在大多数OS X游戏都是使用Cocoa框架用Objective-C编写的,其中使用纯C/C++编写的性能敏感代码(以及使用OpenGL的图形代码)。

0

我也感兴趣的话题,我发现这个 http://wiki.gnustep.org/index.php/3DKit

看起来很死,但现在铿锵/ LLVM 2.9很多的Objective-C 2的好吃的东西都可以在Linux上,可能是有趣拥有3D API。