我只是想知道在gamedev中有些东西是如何工作的:
编辑:对不起,这可能还不清楚,但我对有游戏行业经验的人的答案感兴趣。我是,而不是,对那些没有游戏开发商业经验的人给出的一些假设感兴趣。我对用C#/Java创建的一些小众游戏的例子也不感兴趣。但是,如果您知道一个比FarCry2更好看的产品(只是和示例,但是您最喜欢的现代漂亮的游戏名称),并且是在Java/.NET中编写的完全,并且具有与FarCry2相似的性能……请不要犹豫地提到这个产品!谢谢。
发布于 2009-10-10 18:01:29
的确,在游戏开发中,不使用STL。尽管某些人总是争先恐后地宣称,他们也从不使用Java、C#或其他托管语言。
我说的不是小型的X-Box直播拱门游戏或网络浏览器游戏之类的东西。我说的是AAA游戏的高端发展。
他们不使用STL。然而,他们确实使用了自己的自定义实现,这些实现看起来非常类似于STL。会有智能数组,会有哈希表,会有智能指针,它们不会是STL。
控制台有一些性能特点,这是非常不同的个人电脑。即使是专门针对PC的游戏项目,也通常使用过去用于控制台项目的代码库。为了使基本的模板结构按需要工作,需要进行大量的调整。
大多数游戏工作室也希望能适应其他平台的代码。当需要将游戏移植到一个新的平台时,锁定微软/索尼/任天堂的实现会带来更多的痛苦。提供的模板库(开始时不一定是STL )通常少于恒星库。至少在硬件周期的早期,当一个工作室正在熨平他们计划在未来五年内继续使用的引擎时,他们是这样做的。
在我工作过的工作室里,我看到了一种相当程度的否定第三方代码的“不建立在这里”的态度。有时这是正当的,有时是没有道理的。在基本数据结构模板的情况下,它通常是。
至于你的第二个问题,偶尔会用到汇编语言。但只有在孤立的情况下,大量的数学需要经常发生。整个引擎可能包含两个或三个asm块的小文件。
发布于 2009-10-10 11:30:10
编写自己的容器可以让您编写跨平台代码并更容易地进行内存跟踪。在控制台上尤其如此,例如,PS3需要对硬件有详细的了解,以便获得最佳的性能。这通常意味着你需要完全控制PPU,SPUs和RSX之间的内存流。
发布于 2009-10-10 11:55:07
我知道,性能实际上是至关重要的,因此仍然(而且我认为永远也不会)没有地方使用托管语言/平台作为Java/.NET,仅仅是因为它们的性能。
不,你不知道这个。你这么想,你想要相信是因为你把游戏开发浪漫化了,因为你认为高级语言是不可能很快实现的。对于90%的比赛来说,.NET的表现是非常好的。只会变得更好。管理平台必须慢一点,这是没有内在原因的。他们有更快的潜力,因为他们是JIT的。实际上,它们的性能与相当好的C++代码大致相同,比典型的C++代码要好得多,比真正好的C++代码稍差一些。而且大多数大型游戏都使用不止一种语言。他们使用脚本语言,如Lua或Python,或一些自制的东西,所有这些都比.NET慢几个数量级。
类似地,您的游戏中大部分都不能用.NET编写,这三个真正的性能关键函数可以在必要时移植到本机C++中。
但是..。最近,我在这里读到,尽管创建游戏的人使用C++作为主要语言,但他们实际上并不使用STL或Boost (或其中的很多)。认为它和性能有一些共同点,对吧?如果我错了,你能告诉我为什么要避开那些图书馆吗?
就像你犯了上述罪一样.关于游戏开发的迷信。“哦,不,我们用不起别人的代码!这太低效了。”在编程实践和方法方面,游戏开发一直停留在80年代。换句话说,不要太担心其他游戏开发者所做的事情。如果STL或Boost使您的代码更容易编写,那么就使用它吧!然后,如果您遇到性能问题,请分析它,并在必要时,将特定的库组件替换为您自己的。
但是大部分STL的开销都是零的。而95%的代码在任何游戏中都不是性能关键。对待游戏开发就像对待其他程序一样。不要把它当作一个神奇的地方,在这里,每一行代码都必须进行完美的优化,而常规规则则不适用。
那么EA的STL版本呢?其他电影公司也有自己的版本吗?
据我所知没有。EA将其部分用于内部使用,但也作为对整个C++社区的投入,作为他们(和许多游戏开发人员)希望从标准的未来修订中看到的一个例子(它也提交给标准委员会)。
https://stackoverflow.com/questions/1547632
复制相似问题