为何没有好用的Android游戏引擎?

随着Android平台的不断发展,近期Android开发者数量呈现出上升势头,就连以往较为冷门的游戏开发领域也涌现出很多生力军。然而,全新的问题正摆在了初学者面前,不少他们从未遇过的问题开始浮上台面。

“找了很久也没看见合适的引擎,看来Android真的不适合游戏开发”、“我试过几个游戏引擎,感受都不是很好,效率低、BUG不可控”,“怎么中国就 没人能作个向Cocos2d那样的引擎呢?看来还得等老外作好才能跟进啊。”这并非虚妄之谈,而是一些刚刚接触Android游戏开发者的真实意见。应 该说,在有些网友的心目中,支持Android的游戏引擎虽然并不算少,却没有一款好用的游戏引擎。或者说,这些网友的疑问在于,世上怎么就没有一款能像 iPhone下的Cocos2d-iPhone那样好用又免费的Android游戏引擎存在呢?


实事求的讲,用Android进行游戏开发,确实还存在很多问题,目前大多数Android游戏引擎的功能,也确实不尽人意(至少不能直接拖拽出游戏 来……)。可是,又有多少人真正考虑过,为何会出现这种现象,为何会出现这种问题?难道真是Android性能不够,程序员水平不够吗?

其实,真正影响到Android游戏引擎开发的问题,远没有表面上看到的那么复杂,仔细说来,也无非是个“多平台兼容”的问题。


没错,在Android游戏开发的道路上,性能不是问题,兼容才是问题,程序不是问题,环境才是问题,开发出多么优秀的游戏引擎都不是问题,怎么才能让这款游戏引擎在任何状况下都显得优秀才是问题。

当咱们进行单一手机品牌下的游戏引擎开发时——好比iPhone,只要兼容iPhone系列就已足够,甚至更进一步,仅仅专一iPhone4也不打紧,毕 竟现今用iPhone者大多“不怕雷劈”,去年的市场宠儿iPhone3应该早被他们弃如敝屣的换成了iPhone4。应该说,iPhone游戏引擎乃至 游戏的制做团队,能够将所有精力与时间都投入到效率与功能的完善上,而彻底没必要理会所谓的平台兼容问题。

可当你为Android平台设计游戏引擎,开发Android游戏时,事情恐怕就没有那么简单。

咱们都知道,在OpenGL对于Linux来讲,是一种很是高效的图形编程接口,而Android内核又基于Linux开发,若是想要提升基于Linux 开游戏引擎的性能,那么使用针对手机环境的OpenGL ES无疑会是最好的选择。(固然,也有某些人出于种种缘由使用Android2D)

然而,相较于iPhone平台,Android平台并不固定于某款或某几款智能手机之上,因为众多厂商的参与,使他在拥有至关庞杂的手机机型的同时,也面 临着很是庞杂的多机型兼容挑战,虽然Dalvik虚拟机足够强大,强大到足以抹杀大部分的环境差别。惋惜的是,咱们视为手机游戏引擎性能保证的 OpenGL ES,却并不在此列,毕竟不管你的软件平台再怎么强大,却始终也没法跨越硬件的藩篱。即使OpenGL一直标榜本身独立于硬件,可假如硬件对OpenGL 的支持不足,那么OpenGL也依旧没法满功率的运算起来(某些古老Android机型,甚至还存在着浮点运算屏障|||……)。这意味着,若是 Android引擎一味去追求最佳效率,就必需要放弃引擎在某些机型上的运行可能性。不然,某些平台上的“良方”,就会当即变成另一些平台上的“毒 药”。


——我知道有网友作过Cocos2d-iPhone的Android移植,假如能看到这里,大约能够会心一笑吧?

而若是咱们无论不顾,一味要让Android在某些平台达到最佳性能,而放弃另一些平台呢?这样作的代价,就是您必须同持有某些Android机型的用户说拜拜。

“什么,你是使用HTC的?对不起,个人程序只支持Nexus One。”

“什么,你居然会用摩托罗拉?有没有搞错?个人游戏是为三星定制的!”


可您可以想象,以上对话存在于现实的Android程序或游戏开发中吗?

若是不能想象,那么放弃某些机型这条游戏引擎开发之路就是走不通的。实际上,虽然Android程序员能够拥有庞大的Android阵营支持,但不管你是 专作摩托罗拉,搞得HTC通通罢工,仍是专作Nexus One(或者传说中的Nexus Two),搞得三星不买帐,都会形成至关巨大的损失。

而假如咱们不追求速度,一味要求跑全机型呢?那么,在引擎设计上,就必须尽量减小对OpenGL ES API的依赖,仅使用全部机型共同支持的那部分,以求最大限度的避免不兼容代码出现,就算——这段代码能提高100%的程序效率也不例外。


这样作的代价显而易见,势必会致使引擎速度在绝大多数环境下都没法达到峰值(由于你的程序并无100%发挥OpenGL性能),也就是咱们一般所见的“低效”问题产生。

而仅仅如此,也还不是最糟糕的状况,真正最糟的状况是,你的引擎跑在某款对OpenGL极不友好的手机环境中(大多数Android手机为了系统的稳定 性,对于OpenGL性能存在有某种程度的限制,这种限制其实比较广泛,仅仅是程度不一样罢了),一名用户气愤的告诉你,你的烂游戏在他手里连10FPS都 跑不到,而你却只能眼泪汪汪的看着手中数款机器跑出了50FPS以上的佳绩。


jME-Android的难产,以及Rokon的夭折,除了各自遇到的困境之外,恐怕始终和Android这让人又爱又恨的OpenGL机能割舍不开。

为何会产生这种缘由?难道是Google的设计出了问题吗?其实,归结产生这种问题的症结,并非软件或硬件的设计问题,而在于Android那无限近似于白送的系统受权政策。

Google“量化宽松”的Android营销策略,当然能快速占领市场,创建Android智能机霸主地位;可是,却也必然会形成分支平台过多,付出广 大Android手机厂商容易向中低端用户群靠拢的代价(系统受权近乎零成本,致使中等收益便可知足高盈利需求);而中低端用户的消费能力,又反过来限制 了手机厂商的手机成本价格;在这近似于“沃洛波罗斯轮回”的怪圈影响下,想要制做出一款即可以100%发挥OpenGL ES性能,又可兼容全部Android机型,极少甚至永不出现“BUG”的游戏引擎,几乎是和让中国队去赢得世界杯冠军一样困难——至少,在最近一年内是 看不到的。由于位置最低的那块木板,必定会决定位置最高那块木板的命运,短板效应的悲剧,几乎无可避免的成了阻碍Android游戏引擎开发的拦路虎。
java


但是,若是Google干掉这头“拦路老虎”,也就是改变Android的受权策略,强制厂商向高端机迈进呢?此刻,假如那样作,又很可能由于忽然抬高的 生产成本,引起Android阵营崩溃,让原本欣欣向荣的Android横死街头——所谓“鱼与熊掌不可兼得”,大概就是这种状况了。

咱们又有什么办法完全解决这种兼容性问题吗?难道咱们就只能在这种兼容困局中消磨生命吗?答案,实际上是有的,并且很是简单,那就是——等待。

没错,在目前这种状况下,即使您有多么的不高兴,即使您对Android游戏引擎现状有多么的不满意,即使您嗲声嗲气地高叫:“兼容什么的最讨厌了!”。 也务必请您保持耐心,静候围绕Android这个“木桶”的“木板们”逐渐长大,以及成长中的Anroid游戏引擎逐渐完善,虽然“各机型完美兼容”的结 果未必就会出现,但随着Android软硬件的不断发展,“各机型近乎完美兼容”的时候,毕竟仍是离咱们愈来愈近了。


咱们都知道,老故事中说出“早知道第七张饼才吃饱,就不应吃那前六张饼了”的人是个傻瓜蛋,可那些说出“吃了一张饼都没饱,后面六张饼也没必要吃了”的家伙,却也未见得就是个聪明人。

毕竟有些事情,不是急出来,扯出来,而是干出来,闯出来的。


——————————————————

附带一提,Slick这款Java游戏引擎最近也要出Android版了,前一阵我看见做者在http://www.javagaming.org 搞兼容性测试,反向了一下APK发现原有模块已经基本移植完毕,正式出现应该不会等得过久。就我的意见来讲,此款引擎的性能与易用性绝对远在Rokon之上。你们有兴趣能够关注他的进度,能催的话更好,小弟想参看一下他的完整代码(^_^):http://slick.cokeandcode.com程序员

00

相关文章
相关标签/搜索