1、随着 Android 平台的不断发展,近期 Android 开发者数量呈现出上升势头,就连以往较为冷门的游戏开发领域也涌现出不少生力军。然而,全新的问题正摆在了初学者面前,很多他们从未遇过的问题开始浮上台面。 “找了好久也没看见合适的引擎,看来 Android 真的不适合游戏开发”、“我试过几个游戏引擎,感觉都不是很好,效率低、BUG 不可控”,“怎么中国就没人能做个向 Cocos2d那样的引擎呢?看来还得等老外做好才能跟进啊。”这并不是虚妄之谈,而是一些刚刚接触 Android 游戏开发者的真实意见。应该说,在有些网友的心目中,支持 Android 的游戏引擎虽然并不算少,却没有一款好用的游
2、戏引擎。或者说,这些网友的疑问在于,世上怎么就没有一款能像 iPhone 下的 Cocos2d-iPhone 那样好用又免费的 Android 游戏引擎存在呢? 实事求的讲,用 Android 进行游戏开发,确实还存在不少问题,目前大多数 Android 游戏引擎的功能,也确实不尽人意(至少不能直接拖拽出游戏来)。但是,又有多少人真正考虑过,为什么会出现这种现象,为什么会出现这种问题?难道真是 Android 性能不够,程序员水平不够吗?其实,真正影响到 Android 游戏引擎开发的问题,远没有表面上看到的那么复杂,仔细说来,也无非是个“多平台兼容”的问题。 没错,在 Android 游戏开
3、发的道路上,性能不是问题,兼容才是问题,程序不是问题,环境才是问题,开发出多么优秀的游戏引擎都不是问题,怎么才能让这款游戏引擎在任何情况下都显得优秀才是问题。当我们进行单一手机品牌下的游戏引擎开发时比如 iPhone,只要兼容 iPhone 系列就已足够,甚至更进一步,仅仅专注 iPhone4 也不打紧,毕竟现今用 iPhone 者大多“不怕雷劈”,去年的市场宠儿 iPhone3 应该早被他们弃如敝屣的换成了 iPhone4。应该说,iPhone 游戏引擎乃至游戏的制作团队,可以将全部精力与时间都投入到效率与功能的完善上,而完全不必理会所谓的平台兼容问题。可当你为 Android 平台设计游戏
4、引擎,开发 Android 游戏时,事情恐怕就没有那么简单。我们都知道,在 OpenGL 对于 Linux 来说,是一种非常高效的图形编程接口,而 Android 内核又基于 Linux 开发,如果想要提高基于 Linux 开游戏引擎的性能,那么使用针对手机环境的 OpenGL ES 无疑会是最好的选择。(当然,也有某些人出于种种原因使用Android2D)然而,相较于 iPhone 平台,Android 平台并不固定于某款或某几款智能手机之上,由于众多厂商的参与,使他在拥有相当庞杂的手机机型的同时,也面临着非常庞杂的多机型兼容挑战,虽然 Dalvik 虚拟机足够强大,强大到足以抹杀大部分的环
5、境差异。可惜的是,我们视为手机游戏引擎性能保证的 OpenGL ES,却并不在此列,毕竟无论你的软件平台再怎么强大,却始终也无法跨越硬件的藩篱。即便 OpenGL 一直标榜自己独立于硬件,可假如硬件对 OpenGL 的支持不足,那么 OpenGL 也依旧无法满功率的运算起来(某些古老 Android 机型,甚至还存在着浮点运算屏障|)。这意味着,如果 Android 引擎一味去追求最佳效率,就必须要放弃引擎在某些机型上的运行可能性。否则,某些平台上的“良方”,就会立即变成另外一些平台上的“毒药”。 我知道有网友做过 Cocos2d-iPhone 的 Android 移植,假如能看到这里,大约可
6、以会心一笑吧?而如果我们不管不顾,一味要让 Android 在某些平台达到最佳性能,而放弃另外一些平台呢?这样做的代价,就是您必须同持有某些 Android 机型的用户说拜拜。“什么,你是使用 HTC 的?对不起,我的程序只支持 Nexus One。”“什么,你竟然会用摩托罗拉?有没有搞错?我的游戏是为三星定制的!” 可您能够想象,以上对话存在于现实的 Android 程序或游戏开发中吗?如果不能想象,那么放弃某些机型这条游戏引擎开发之路就是走不通的。实际上,虽然Android 程序员可以拥有庞大的 Android 阵营支持,但无论你是专做摩托罗拉,搞得 HTC统统罢工,还是专做 Nexus
7、One(或者传说中的 Nexus Two),搞得三星不买账,都会造成相当巨大的损失。而假如我们不追求速度,一味要求跑全机型呢?那么,在引擎设计上,就必须尽可能减少对 OpenGL ES API 的依赖,仅使用所有机型共同支持的那部分,以求最大限度的避免不兼容代码出现,就算这段代码能提升 100%的程序效率也不例外。 这样做的代价显而易见,势必会导致引擎速度在绝大多数环境下都无法达到峰值(因为你的程序并没有 100%发挥 OpenGL 性能),也就是我们通常所见的“低效”问题产生。而仅仅如此,也还不是最糟糕的情况,真正最糟的情况是,你的引擎跑在某款对 OpenGL 极不友好的手机环境中(大多数
8、Android 手机为了系统的稳定性,对于 OpenGL 性能存在有某种程度的限制,这种限制其实比较普遍,仅仅是程度不同罢了),一名用户气愤的告诉你,你的烂游戏在他手里连 10FPS 都跑不到,而你却只能眼泪汪汪的看着手中数款机器跑出了50FPS 以上的佳绩。 jME-Android 的难产,以及 Rokon 的夭折,除了各自遇到的困境以外,恐怕始终和 Android这让人又爱又恨的 OpenGL 机能割舍不开。为什么会产生这种原因?难道是 Google 的设计出了问题吗?其实,归结产生这种问题的症结,并不是软件或硬件的设计问题,而在于 Android 那无限近似于白送的系统授权政策。Goog
9、le“量化宽松”的 Android 营销策略,固然能快速占领市场,建立 Android 智能机霸主地位;但是,却也必然会造成分支平台过多,付出广大 Android 手机厂商容易向中低端用户群靠拢的代价(系统授权近乎零成本,导致中等收益即可满足高盈利需求);而中低端用户的消费能力,又反过来限制了手机厂商的手机成本价格;在这近似于“沃洛波罗斯轮回”的怪圈影响下,想要制作出一款即能够 100%发挥 OpenGL ES 性能,又可兼容所有Android 机型,极少甚至永不出现“BUG”的游戏引擎,几乎是和让中国队去赢得世界杯冠军同样困难至少,在最近一年内是看不到的。因为位置最低的那块木板,一定会决定位
10、置最高那块木板的命运,短板效应的悲剧,几乎无可避免的成了阻碍 Android 游戏引擎开发的拦路虎。可是,如果 Google 干掉这头“拦路老虎”,也就是改变 Android 的授权策略,强制厂商向高端机迈进呢?此刻,假如那样做,又极可能因为突然抬高的生产成本,引发 Android 阵营崩溃,让本来欣欣向荣的 Android 横死街头所谓“鱼与熊掌不可兼得”,大概就是这种情况了。我们又有什么办法彻底解决这种兼容性问题吗?难道我们就只能在这种兼容困局中消磨生命吗?答案,其实是有的,而且非常简单,那就是等待。没错,在目前这种情况下,即便您有多么的不高兴,即便您对 Android 游戏引擎现状有多么的不满意,即便您嗲声嗲气地高叫:“兼容什么的最讨厌了!”。也务必请您保持耐心,静候围绕 Android 这个“木桶”的“木板们”逐渐长大,以及成长中的 Anroid 游戏引擎逐渐完善,虽然“各机型完美兼容”的结果未必就会出现,但随着 Android 软硬件的不断发展,“各机型近乎完美兼容”的时候,毕竟还是离我们越来越近了。 我们都知道,老故事中说出“早知道第七张饼才吃饱,就不该吃那前六张饼了”的人是个傻瓜蛋,可那些说出“吃了一张饼都没饱,后面六张饼也不必吃了”的家伙,却也未见得就是个聪明人。毕竟有些事情,不是急出来,扯出来,而是干出来,闯出来的。