我想问一些关于手机游戏移植的问题......
如果我有一个简单的2D C ++游戏引擎并拥有基于该引擎的PC游戏,我想将其移植到不同的移动平台BREW,J2ME,iPhone,Android,Symbian等。
我是否需要为每个平台重新编码引擎和游戏?还是有更简单,更有效的方式?我确信这个过程很复杂,因为不同的手机有不同的图形/处理器/内存等。我对移动游戏移植过程的概述感到好奇。 :)
谢谢!
答案 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等。 最重要的是:它很便宜并提供免费的完整评估,直到您决定使用它制作商业内容。
找到它您可以在网站上看到基于此平台的游戏和其他项目的展示。
不幸的是,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)
答案 6 :(得分:0)
正如其他人所指出的那样,如果你的引擎建立在某些“平台独立”框架之上,比如Java,那么它应该比用低级语言编写的更容易。但是,例如,iPhone / iPod touch上既不支持Java也不支持Flash,它们可能需要一段时间才能实现。另一方面,如果我没记错的话,那些平台上唯一可用的SDK就是Objective-C,猜测,你并没有用来实现你的引擎。
通常,它取决于您编写的应用程序/游戏引擎。很可能你不得不改变一些东西,因为很少有所有平台上都有可用的功能。 J2ME图形是“平台独立”依赖的经典场景,或者我听说过。您需要更改多少取决于您的代码的可移植性,即您将可能需要更改的部分分开的程度。
不幸的是,这是我能给你的最佳答案。