我如何了解跨平台游戏开发?

时间:2009-06-17 19:29:37

标签: windows xbox360 ps3

像Valve这样的公司如何设法向所有三个主要游戏平台发布游戏?我对Windows,Xbox360和PS3之间的代码共享的最佳实践感兴趣,因为理想的解决方案是尽可能多地重用代码而不是为每个平台重写整个代码。

7 个答案:

答案 0 :(得分:6)

与在其他环境中编写与平台无关的代码没有任何不同。隐藏通用接口背后的特定于平台的详细信息(输入,窗口交互,主事件循环,线程等),并定期在您打算支持的所有平台上进行测试。

请注意,Cell的线程模型非常不寻常,以至于“一般”执行线程需要注意。我不是Valve的员工,我不知道他们的秘密,但我的理解是,大多数想要以PS3为目标的游戏开发人员使用一个工作队列,个别单元处理器根据需要抓取任务。这不一定是使用Cell的最佳方式,但它很好地概括为更传统的线程模型(例如,frex,PC和360都使用的那种)。

答案 1 :(得分:4)

有很多关于此主题的游戏开发者杂志文章和GDC讲座。事实上,既然你在GDC08上提到过Valve they delivered a talk describing their approach

这是一个很大的主题,我可以(而且有)谈论几个小时,但电梯摘要是:

  • 确定引擎的哪些部分完全是特定于平台的,并将它们放在抽象之后。例如,需要为每个控制台重写文件和资产加载;但你可以隐藏在IFileSystem接口后面,该接口提供游戏代码与之对话的统一API。
  • PS3让这很难,因为它的抽象点必须与其他平台完全不同。即使是碰撞和导航等游戏功能也必须以不同的方式为Cell编写。
  • 尽量保持叶子游戏代码(实体,AI,sim)尽可能与平台无关......
  • 但是接受即使是最时髦的游戏代码有时也需要一些特定于平台的#ifdef用于性能或内存或TCR原因。由于制造商的认证要求存在冲突,因此必须重写许多UI。
  • 任何说“我不担心表现”或“记忆不是问题”的人都不应该在工资单上。

答案 2 :(得分:3)

这个问题可以分为两个单独的问题。 “我怎么写可移植代码?”和“主流游戏平台有哪些不同的要求?”。

第一个问题相对容易回答。写入可移植代码中介绍了抽象非可移植代码的最佳实践: http://books.google.ca/books?id=4VOKcEAPPO0C&printsec=frontcover

将理论付诸实践,Quake 3源代码可以很好地将不同的平台划分为C代码库的单独区域,可在http://www.idsoftware.com/business/techdownloads/获得。但是,它没有演示C ++模式,例如抽象接口,每个平台实施一次。

问题的第二部分,“主流游戏平台的不同要求是什么?”更加强硬。但是,值得注意的是,您最大的变化领域仍然是渲染器,音频子系统和网络。

每个控制台平台都有一系列认证要求,可根据与各自控制台所有者的协议提供。这些要求推动了用户体验的一致性,并没有关注游戏玩法或定性的高级问题。例如,您的游戏可能需要显示一个相当有趣的动画加载屏幕,并且黑屏是不可接受的。

尽快掌握本文档对于在特定控制台平台的开发中做出正确选择至关重要。

最后,如果您无法使用控制台devkit,我建议您将代码从Windows移植到Mac。如果您支持通用二进制文件,Mac会为您提供一个操作系统端口,以确保您不依赖于Windows以及处理器端口。这可以确保您的代码与字节序无关。

如果您同时支持PC和Mac,那么如果您将来可以访问它,您将能够支持第三个平台。

附录您写道:

  

理想的解决方案是尽可能多地重复使用   代码尽可能而不是重写   每个平台的整个事情

在许多游戏移植场景中,理想的解决方案是尽可能多地重用代码,而是为每个平台编写最佳代码。代码可以在项目之间重用,并且与引擎引入的内容相比相对便宜。更合理的目标是针对在所有平台上运行而无需修改的最低公分母内容(包含媒体内容的构建阶段)没关系。)

答案 3 :(得分:3)

同时开发很棒。你会发现你在一个平台上找不到各种各样的错误。

我记得DOS中的程序员一直都有空指针,因为写入低内存并没有立即崩溃。当您移植到Amiga,Atari ST或Macintosh时,繁荣!我记得告诉过一个DOS程序员,他在一个正在运送的游戏中有几个空指针。他想了几秒钟,露齿而笑,“这解释了一些事情。”

既然游戏预算如此庞大,那么同时发送它们非常重要,这样您就不会浪费营销和广告预算。

我对同步开发的建议是选择一个主导平台,但绝不让其他平台落后一周以上。当您编写代码的哪些部分对所有平台都是通用的并且哪些不同时,这将变得很明显。将差异拉出到一个或多个特定于平台的区域。

我的经验是在C / C ++中。如果你不得不针对不同的语言(例如,Java和Objective-c)进行移植,这是一个更大的问题。

答案 4 :(得分:2)

几年前,Opera首席执行官在接受采访时表示,开发独立平台的关键是摆脱任何单一的操作系统/平台库。他接着说,他们开发了自己的库来提高操作系统的性能。

我的假设是,大公司将拥有一个共同的,Xbox,PS,Windows,FooOS,独立的团队。每个平台需要以不同方式进行调整,并且需要不同的实现方法。我不认为他们为所有平台做过一个来源;相反,他们为每个操作系统构建一个,从而提高效率。我记得EA曾经比PC版早发布一些主机游戏,反之亦然。

另一个问题是不同的控制台具有不同的硬件,因此需要不同的编程技术。

有两个极端,构建一个适合所有的源(例如java),但是你会冒低效率或写40个版本的风险;为每个平台优化的一个

答案 5 :(得分:1)

当我有一个朋友参加教育电脑游戏时(在学习公司扼杀了这个领域之前),他非常喜欢创建跨平台的图书馆来做所有事情。

这比其他应用程序更容易游戏。例如,如果您有在Mac和Windows上运行的文字处理应用程序,它确实需要看起来和行为类似于Mac上的Mac应用程序和Windows上的Windows应用程序。写一个游戏,它不必符合本机行为,外观和感觉。

答案 6 :(得分:1)

如果您需要开源示例,可以查看Quake 1,2和3引擎的源代码。它们的结构非常便于携带。 (当然,没有ps3或xbox360支持,但同样的原则适用)

http://www.idsoftware.com/business/techdownloads/