在现代游戏设计中,游戏的哪些部分是可移植的?

时间:2012-07-29 15:17:39

标签: c++ opengl directx

假设你是一家大公司并制作了一个巨大的,重磅炸弹的头衔,它将瞄准PC,Mac,Xbox和PS3。让我们说你选择C ++,就像大多数工作室倾向于做的那样。您编写哪些部分是可移植代码?真的可以写一个便携式游戏吗?如果你去一个新的平台,你是否必须重写渲染引擎和用户界面?

4 个答案:

答案 0 :(得分:2)

一个有根据的猜测是,除硬件相关代码之外的所有内容都是可移植的。即游戏逻辑,矢量图形,声音(?)(非常)便携,图形输出,内存管理,时间不是(总是)。

通过良好的库选择,可以最大化可移植代码的数量。

答案 1 :(得分:1)

您肯定不能要求您的PC游戏玩家使用360控制器。

渲染和用户界面必须至少从头开始重新完成。此外,还可能需要对其他与操作系统相关的功能(如网络)进行改造。毕竟,boost::asio可能无法在PS3上运行。其他一些特定于处理器的东西,比如矢量化

然而,理想情况下,游戏会尽可能多地利用可移植代码。

答案 2 :(得分:1)

通常情况下,如果有物理引擎,我会假设它是可移植的。也将是玩家系统,例如健康,库存,NPC行为等将是平台无关的。您将不得不重写渲染引擎,这很可能取决于游戏的控制台。由于必须与不同控制器交互,用户交互可能会有一些重写,这些控制器很可能在每个控制台中以不同方式访问。

通常,如果代码与控制台的API交互,则必须重写渲染,矢量化,用户界面,输入等。物理,基本行为,艾滋病和健康库存管理等基本代码实际上不必重写。

所以最后:如果它依赖于硬件,则必须重写或重构。

答案 3 :(得分:1)

遵循DRY原则还会导致更多可移植代码,因为任何非可移植代码都是本地化的。

例如,避免在代码中多次执行此操作:

#if defined(PC)
  // create a network connection PC-style
#elif defined(XBOX)
  // create a network connection XBox-style
#elif defined(MAC)
  // create a network connection Mac-style
#elif defined(PS3)
  // create a network connection PS3-style
#endif

而是做一次并创建一个函数

createNetworkConnection();

您在多个地方使用。