关于手机游戏移植

时间:2009-01-16 07:37:18

标签: mobile

我想问一些关于手机游戏移植的问题......

如果我有一个简单的2D C ++游戏引擎并拥有基于该引擎的PC游戏,我想将其移植到不同的移动平台BREW,J2ME,iPhone,Android,Symbian等。

我是否需要为每个平台重新编码引擎和游戏?还是有更简单,更有效的方式?我确信这个过程很复杂,因为不同的手机有不同的图形/处理器/内存等。我对移动游戏移植过程的概述感到好奇。 :)

谢谢!

7 个答案:

答案 0 :(得分:5)

攻击移动游戏移植有多种方法。首先,直到最近它主要是BREW和J2ME。 iPhone,Android和黑莓正在改变这种状况,使移动游戏移植的不可能任务变得更加不可能。直到最近,我还参与了第三方手机游戏开发多年。我看到BREW消失,看到出版商完全专注于J2ME,因为移植成本正在扼杀行业。估计其成本,包括时间和金钱,并且似乎每个游戏的总开发成本的50-60%的钟形曲线只是移植。

在我们公司,我们通过两个相互并行的引擎来处理移植,一个在BREW中,一个在J2ME中。我们从不支持Symbian,因为Symbian开发不赚钱。它主要用于可能在一两台设备上的高端技术演示,无法进入大众市场。此外,大多数Symbian手机都支持J2ME。

我们要求发布商提供游戏的7-23参考版本,针对BREW和J2ME中的许多不同设备。在继续前进之前,出版商也开始要求使用J2ME触摸屏参考版本,并且根据最终产品以及当时iPhone版本的成本效益,iPhone SKU将被定为“待定”。然后,参考版本将被传递到移植房,以将不同的引用转换为数千个其他所需的SKU。

像Gameloft这样的公司仍然通过移植来蛮力。这就是为什么Gameloft的游戏质量始终高于其他行业。但是,由于成本原因,小公司不可能以这种方式解决问题。并非所有人都能在北京设有5000名开发人员。

有很多公司在那里开发引擎以降低移植成本。 Mobile-Distillery是我接触过的很多,但我们最终没有使用它。所以,我不能保证他们。这里的问题是你将受到另一家公司引擎的摆布。性能可能会有问题,因为它的构建目标是成千上万的SKU。另外,在这种情况下,你几乎无法控制游戏的低级实现。最终的结果似乎是针对手机最低标准的游戏。

最后,许多开发人员只是放弃了支持所有移动平台的想法。 iPhone上的游戏大量涌入,因为1)它只需要针对一个平台,2)通过AppStore为开发者提供70%的利润份额。通过运营商发布,这个百分比甚至不具有可比性。

答案 1 :(得分:2)

这当然取决于你的“简单引擎”的编写语言。 Java应该更容易在平台之间移动,因为它实际上是它自己的平台。如果你的引擎是用更低级的东西编写的,比如C ++,它很可能依赖于特定于平台的图形库和输入库,因为C ++没有为你提供。

答案 2 :(得分:2)

我个人可以推荐edgelib作为移动游戏和应用程序开发的跨平台层。

它被广泛使用,提供卓越的性能,并支持当今大多数重要的智能手机平台:Symbian,Win Mobile,IPhone等。 最重要的是:它很便宜并提供免费的完整评估,直到您决定使用它制作商业内容。

您可以在http://www.edgelib.com

找到它

您可以在网站上看到基于此平台的游戏和其他项目的展示。

不幸的是,BREW不受支持。而且由于它不是一个真正的开放平台,与其他移动操作系统平台相比,它带来了相当大的挑战,因为它的开发社区大多是专业的,而且在线方面不是很“健谈”...... 随着比赛逐渐变得更加开放,这可能会改变。

我不隶属于Edgelib ......这只是我个人的意见。 :)

答案 3 :(得分:1)

没有免费的午餐。您正在考虑的平台不兼容,大多数允许您运行C / C ++代码,因此理论上您可以将引擎移植到某些标准,例如ANSI或C99,它将在大多数平台PC,BREW中编译但是,这并没有考虑您的引擎可能需要的库。例如,如果您的引擎使用OpenGL,那么它可以在PC中运行,而某些控制台但是在Symbiam设备上您需要的OpenGL-ES不完全相同,因此您需要对所有库使用抽象。

关于J2ME和Android,它们是Java平台,因此至少在没有任何特殊VM lib的情况下,不能在那里运行C / C ++。在这种情况下,您需要将C / C ++代码移植到可能过度的Java。

所以我对此的回答是,你可以使用标准对libs和代码进行抽象,你可以在几个平台上使用相同的引擎,只要你可以为它们使用相同的编译器。

看看这个引擎的例子CubicVR它允许你为PC / Linux / MAC / iPhone(可能)/索尼PlayStation Portable编译相同的引擎

答案 4 :(得分:1)

我用于多平台开发的是实现硬件抽象层。引擎使用C ++编码,但使用普通的C接口来实现系统调用。这允许您为您的游戏和引擎使用完整的C ++,并使用您的平台所需的任何语言编写的系统抽象链接。 Symbian不支持100%的C ++功能,但仍然有一些bug,而且IPhone API使用Objective C. C兼容你提到的大多数平台(好吧,不是Java)和链接C比C ++更容易,因为问题较少(ABI和所有东西)。

在C中实现额外的接口有点慢,但在将其移植到其他平台时会对您有所帮助。此外,它允许您拥有除Symbian,BREW等之外的Win32 / Linux / Mac版本。我主要使用Symbian和N-Gage工作,这些平台的调试功能明显落后于Visual Studio或GDB。另一方面,Iphone有很多很酷的工具来调试和分析你的应用程序。

答案 5 :(得分:0)

  1. 如果您的引擎没有用JAVA或FLASH编写,我看不到您可以在不使用可能在手机上运行的语言重新编码的情况下使用引擎的方法。
  2. 如果用JAVA或FLASH编码,我认为你的主要问题(除了手机和电脑之间的性能差异)是主要内存。正如我所听到的那样,主要内存是手机游戏开发中最大的问题。

答案 6 :(得分:0)

正如其他人所指出的那样,如果你的引擎建立在某些“平台独立”框架之上,比如Java,那么它应该比用低级语言编写的更容易。但是,例如,iPhone / iPod touch上既不支持Java也不支持Flash,它们可能需要一段时间才能实现。另一方面,如果我没记错的话,那些平台上唯一可用的SDK就是Objective-C,猜测,你并没有用来实现你的引擎。

通常,它取决于您编写的应用程序/游戏引擎。很可能你不得不改变一些东西,因为很少有所有平台上都有可用的功能。 J2ME图形是“平台独立”依赖的经典场景,或者我听说过。您需要更改多少取决于您的代码的可移植性,即您将可能需要更改的部分分开的程度。

不幸的是,这是我能给你的最佳答案。