如何为不同平台创建游戏?


9

如何为不同平台创建游戏?

例如,《使命召唤:现代战争3》可在PS3,Xbox 360,Wii和PC上使用。

是否没有通用代码对它们进行了完全重新编程?是否有任何中间代码?


3
通常,这都是用C ++完成的,并且特定于平台的内容降级为几个类。
ashes999 2011年

Answers:


11

大多数生产级别的游戏引擎都具有所谓的硬件抽象层。这是游戏引擎可以用来与硬件对话而无需知道是哪种硬件的通用API。他们只是调用SoundManager.PlaySFX(SFX_ID)等。但是,在声音管理器的下面,它将知道其实际使用的硬件,并进行适当的调用以播放声音效果。

这允许使用该抽象层来开发引擎,因此,只要为与该抽象相匹配的硬件提供了API,它就可以在任何系统上运行。编辑:正如Johnathan所指出的,您要在每个平台上运行的API都是必需的。特雷弗(Trevor)的观点是,当从高内存系统转移到低内存(对我来说最糟糕的是PS3到PSP)时,您可能不得不解决不同的硬件限制。对我来说幸运的是,由于平台的缘故,我不必重写整个系统,但是我必须仔细研究并优化对象,以减少占用的空间。

事物的另一面是在艺术领域,其中纹理或模型等的分辨率不同。可以针对特定目标构建游戏的资产,以便PC在获取声音效果的同时获取其wav文件,同时将它们转换为PS3支持的特定格式等。

希望这可以帮助。


1
我要补充一点,在大多数情况下,PC / PS3 / Xbox360将共享一个通用代码库,而Wii / PS2 / PSP将共享一个不同的代码库。Gameboy将单独拥有一个单独的代码库,而iPhone / Android通常将共享一个代码库。这些主要是由于广泛的处理能力,可用的内存以及各种平台的图形功能所致。我曾经不得不将游戏从Xbox 360移植到PS2。仅有极少数原始代码在该过程中幸存下来,只是因为它假定有很多可用的RAM。我不得不重写它以使用更少的内存。
Trevor Powell

+1,您没有明确提到平台之间的HAL不同(Psykocyber也回答了这个原因)-也许还要补充说明每个平台都需要HAL?另外,可能需要使用ANSI C / ++,因为您需要对其进行交叉编译。
乔纳森·迪金森

Trevor:Gameboy?该死,我一定是过去了,最好回到我的时间机器上……

3

在理想情况下,其他答案可以说明问题。大多数代码在游戏中是通用的,干净的抽象层用于与硬件/平台相关的部分。

但是,许多游戏都有由外包公司完成的移植,并且代码大相径庭。对于控制台尤其如此,但从Windows到OSX或Linux的端口也很常见。

在控制台上,硬件差异很大,因此通常必须完全重写核心渲染的整个块(很少还有其他系统)。在PC上,您可以通过D3D和OpenGL进行抽象,因为OS API有所不同,但所有PC硬件大致相同。

在控制台空间上,您可能会发现根本无法将超级高效的华丽渲染引擎直接移植到其他控制台上,因为GPU功能是如此不同,并且您实际上需要挤出所有最后的性能百分比才能获得7年的性能旧硬件即可运行您的现代游戏。您可以轻松地找到在XBox上效果最佳的光线通过在PS3上极其缓慢的情况,以及在XBox上PS3狗采用最佳方法的情况。其他硬件和平台差异(例如PS3上的SPU与XBox的三核CPU)使得很难依靠简单的薄硬件抽象层作为您唯一的平台相关代码路径。

由于每个平台还需要大量的专业知识才能正确使用它,因此许多游戏都需要专门的外包移植公司来将游戏带到其他平台。在PC空间中,有时您可以在控制台空间中找到负责端口的单独开发人员(例如Ryan“ icculus” Gordon,他负责许多Linux游戏端口;通常直接进行工作,将D3D更改为GL,将Win32更改为POSIX / SDL),而在控制台空间中有些公司的所有团队都在将大型游戏移植到大型游戏上。

移植到某些平台确实需要几乎完整的重写或资产重新设计。例如,Wii的“使命召唤”港口是由一家外包公司完成的,因此必须重做所有内容(包括艺术品),以适应Wii极为有限的硬件的限制。例如,Wii甚至没有着色器,因此完全不可能完全重用相同的引擎和效果/材质,而有限的内存和CPU / GPU需要较小的纹理和较少的细节模型,以及游戏限制等。同样,通常通常由第三方完全重写移动平台的端口。

较新的引擎可以更轻松地在平台之间进行移植,但是大型游戏通常仍需要更新其代码的相当大的部分并重做许多资产,才能从功能更强大的PC平台和游戏机更改为功能更受限制的平台。


2

James响应仅与PC有关,与特定平台上的实现无关。
尽管所有引擎都为大部分游戏代码提取了平台,但某些部分必须按平台编写。这包括所有I / O,包括网络,渲染,音频,设备输入和我认为视频输出。
比较在Xbox和PS3上说“虚幻”的渲染代码。Xbox使用Xbox DirectX版本,而PS3使用libgcm(OpenGl库太慢)。为了简化一点,在所有平台上,游戏程序员仅看到“ AudioSystem.PlaySound(SoundName here)”,而对于每个平台,它们在内部运行时会调用平台API进行声音输出。
有关更多编程,请参阅Tatrad的评论。


1
这正是James所说的,他只是忽略了HAL对于每个平台都是不同的。
乔纳森·迪金森

实际上,我确实提到过它可以在提供HAL API的任何系统上运行,但是我更加清楚了,因为这显然引起了混乱。另外,除非您要像Mac或Unix系统那样跨OS,否则请勿将PC上的代码移植到另一台PC上。对于运行大多数游戏的Windows环境,硬件驱动程序已经为您解决了这一问题,您可以通过驱动程序调用创建DirectX或OpenGL数据缓冲区,并且硬件知道从那里可以做什么。
詹姆斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.