我在我的独立游戏公司使用了Marmalade / Airplay将近两年时间。对我来说,这是一个胜利,因为我只是一个程序员,我可以在Windows上使用MS Dev Studio(这是我最喜欢的开发环境),几乎可以完成所有工作,并且它可以保护我免于处理许多特定平台的详细信息,特别是各种开发工具,这可能会占用我更多本可用于游戏内容的时间。
Marmalade的速度不会成为问题。您的C++代码运行本机。此外,访问相机和其他功能也不应该成为问题;已经提供了它们或者可以使用扩展SDK添加,这很容易使用。
Marmalade是一款成熟的产品,该公司在快速解决问题方面非常有帮助,即使是免费使用该产品的独立开发人员。除了跨平台功能外,它还内置了一些不错的工具,如内存泄漏跟踪器、日志系统、图形分析工具等。
我在使用Marmalade时遇到了一些缺点。
1. 尽管理论上任何API或第三方SDK都可以通过扩展系统访问,但实际上您需要的可能尚不存在。例如,许多开发人员目前正在努力将分析包Flurry集成到应用中,这对一些人来说是个挑战。与许多其他第三方SDK类似的情况也存在;如果您正在进行Objective-C开发,则可能只需要几行代码就可以集成,但通过Marmalade可能会更困难。
2. 由于操作的跨平台层,某些事情可能会不太自然。对我来说,一些示例包括:
- 我在iOS和Android上无法正确地显示我的启动屏幕(应用程序启动屏幕),并且很难在没有一些闪烁、短暂的黑屏时间或者在Marmalade应用程序本身的设备负载和Marmalade加载应用程序代码之间转换时调整图像大小的情况下显示它们。
- Marmalade实施了非常简单的内存模型,您会得到一个固定的堆,所有内存分配都是通过Marmalade完成的。从系统的角度来看,应用程序只有并保留一个大块(或几个大块)的内存。这有一些优点,但我在将此模型与iOS模型相匹配方面遇到了问题,例如收到内存警告并被期望放弃任何不必要的资源。这似乎是一个“一刀切”的情况,最终失去了一些关键性能。您可以使用扩展管理器和其他方法来显示本地UI元素,但整合大量的本地外观UI可能是一项挑战。因此,如果您的应用程序类似于游戏,并且用户可以处理非标准按钮等内容,那么这很好,但如果您预计需要重要的本地UI,则更难办到。[编辑:最新版本的Marmalade增加了本地UI框架,让您以通用方式指定标准UI元素,然后使用适当的设备小部件实现它们。我没有使用过这个,但它看起来相当全面。]
如果遇到问题,通常不清楚它是一般的操作系统问题还是Marmalade问题,找到帮助可能会感到孤独。例如,我最近在我的游戏中添加了iOS和Android的应用内购买。 IAP很具有挑战性,即使没有额外的SDK层,也有许多特殊情况需要处理。在我的情况下,我的应用程序因为一个小问题被苹果拒绝了,而在被拒绝的状态下,我的应用内购买也处于“已拒绝”状态(尽管IAP本身并没有任何错误; 这只是苹果过程的怪癖)。当我试图回归测试应用内购买功能时(同时我提交修复这个非与应用内购买相关的问题),游戏实际上崩溃了,而不是获得适当的错误结果。我能确定崩溃不是在我的游戏代码中发生的,所以要么是操作系统(不太可能),要么是处理应用内购买回调的Marmalade中间层(这就是它变成的[更新11/28/2012:据报告,Marmalade已经在最近的SDK更新中修复了这个问题])。
因此,在这种情况下,您可以尝试在Stack Overflow上寻求帮助,但实际上没有人愿意为您提供帮助,因此您需要依赖Marmalade团队向您提供答案。正如我所说,他们在这方面做得相当不错,但它无法与来自全球常规iOS程序员社区的几乎即时响应相竞争。因此,我会说这是使用像Marmalade这样的系统时我最大的担忧。它节省了您花费时间学习各种平台SDK细节的时间,但是当遇到问题时,您将“取决于”Marmalade团队(或友好的Marmalade社区成员)向您提供答案。(在这里请记住,我作为一个免费的独立开发者,只获得标准优先级的问题解决方案。您可以支付费用以获得保证的快速解决方案。)对我个人而言,一直不得不回来向我的制作人说“我正在等待Marmalade的答案”是很困难的。
(另一个问题3的例子是直到最近才有一些Android设备上的声音效果存在延迟的问题。这是一个Marmalade问题,他们最终确实解决了它,但需要一段时间,并且在此期间基本上无事可做。)请记住(正如其他回答者所指出的),即使没有Marmalade,您仍然可以在iOS或Android上将大部分代码库编写为C++。
尽管上面列出了许多潜在问题,但我是Marmalade的粉丝,并感谢公司为我提供的免费服务。当涉及到其他平台时,这个工具真正发挥作用,否则你可能从未关注过这些平台,例如对我来说就是bada或PlayBook。您可以从计算机和开发人员工作室(或者如果想让自己的生活变得有点艰难,可以从带有xcode的Mac上)轻松地部署到各种设备上。他们拥有的模拟器工具非常好用,只有少数情况下我必须在设备本身上进行调试;通常情况下,如果它在模拟器上运行,它就会正常工作。IdeaWorks承担了巨大的挑战,他们正在很好地处理所有这些功能(即基本上每个移动设备上提供的功能)和所有这些平台(即存在的所有重要设备,但不包括Windows Phone 7,因为它当前不允许本机代码)。它只是需要一些注意事项。