随着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手机厂商easy向中低端用户群靠拢的代价(系统授权近乎零成本,导致中等收益就可以满足高盈利需求);而中低端用户的消费能力,又反过来限制了手机厂商的手机成本价格;在这近似于“沃洛波罗斯轮回”的怪圈影响下,想要制作出一款就可以以100%发挥OpenGL ES性能,又可兼容全部Android机型,极少甚至永不出现“BUG”的游戏引擎,差点儿是和让中国队去赢得世界杯冠军相同困难——至少,在近期一年内是看不到的。由于位置最低的那块木板,一定会决定位置最高那块木板的命运,短板效应的悲剧,差点儿无可避免的成了阻碍Android游戏引擎开发的拦路虎。

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

我们又有什么办法彻底解决这样的兼容性问题吗?难道我们就仅仅能在这样的兼容困局中消磨生命吗?答案,事实上是有的,并且很easy,那就是——等待。

没错,在眼下这样的情况下,即便您有多么的不高兴,即便您对Android游戏引擎现状有多么的不惬意,即便您嗲声嗲气地高叫:“兼容什么的最讨厌了!”。也务必请您保持耐心,静候环绕Android这个“木桶”的“木板们”逐渐长大,以及成长中的Anroid游戏引擎逐渐完好,尽管“各机型完美兼容”的结果未必就会出现,但随着Android软硬件的不断发展,“各机型近乎完美兼容”的时候,毕竟还是离我们越来越近了。

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

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

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

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

为什么没有好用的Android游戏引擎?的更多相关文章

  1. 八款常见的Android游戏引擎

    原文地址:http://bbs.csdn.net/topics/380203732 1.Angle  Angle是一款专为Android平台设计的,敏捷且适合快速开发的2D游戏引擎,基于OpenGL  ...

  2. 教你如何选择Android游戏引擎

    我们进行Android游戏开发时选择游戏引擎是必须的,但是该如何选择呢?哪个Android游戏引擎更加适合自己呢?本文就提供了三个游戏引擎的对比说明,阐述了它们各自的特点,为大家选择引擎提供了参照. ...

  3. 记录一下八款开源 Android 游戏引擎

    记录一下八款开源 Android 游戏引擎 虽然android学了点点,然后现在又没学了(我为啥这么没有恒心呢大哭).以后有时间还是要继续学android的,一定要啊!虽然现在没学android游戏编 ...

  4. [Android游戏开发]八款开源 Android 游戏引擎 (巨好的资源)

    初学Android游戏开发的朋友,往往会显得有些无所适从,他们常常不知道该从何处入手,每当遇到自己无法解决的难题时,又往往会一边羡慕于 iPhone下有诸如Cocos2d-iphone之类的免费游戏引 ...

  5. Android游戏引擎总汇 原文出处:http://software.intel.com/en-us/blogs/2012/03/13/game-engines-for-android?page=1

    随着Android系统的使用越来越广泛,了解一下Android平台下的游戏引擎就非常有必要.而同时因为基于Intel x86的移动设备越来越多,我也非常关注支持x86的移动游戏引擎.然而就目前为止游戏 ...

  6. 八款开源 Android 游戏引擎 (巨好的资源)

    转载地址:http://software.intel.com/zh-cn/blogs/2012/01/13/android-4 初学Android游戏开发的朋友,往往会显得有些无所适从,他们常常不知道 ...

  7. Android 八款开源 Android 游戏引擎

    原文地址 本文内容 Angle Rokon LGame AndEngine libgdx jPCT Alien3d Catcake 最近无意间看到一篇关于 Android 搜索引擎的文章,于是搜索了, ...

  8. 八款开源 Android 游戏引擎[转]

    记录一下,以备不时之需~~~~~ 虽然android学了点点,然后现在又没学了(我为啥这么没有恒心呢大哭).以后有时间还是要继续学android的,一定要啊!虽然现在没学android游戏编程,不过还 ...

  9. [转]八款开源Android游戏引擎

    八款开源Android游戏引擎 1.Angle Angle是一款专为Android平台设计的,敏捷且适合快速开发的2D游戏引擎,基于OpenGL ES技术开发.该引擎全部用Java代码编写,并且可以根 ...

随机推荐

  1. win8 VS2010 配制OpenGL

    glut下载地址: http://www.opengl.org/resources/libraries/glut/glutdlls37beta.zip glut.h  ---> C:\Progr ...

  2. 您在基于 Windows 7 的或基于 Windows Server 2008 R2 的计算机上读取器中插入智能卡时出现错误消息:"设备驱动程序软件未能成功安装"

    http://support.microsoft.com/kb/976832/zh-cn http://support.microsoft.com/kb/976832/zh-tw 症状 当智能卡插入智 ...

  3. Recover a file even if it was not committed but it has to have been added when you use git reset head by mistake.

    git init echo hello >> test.txt git add test.txt Now the blob is created but it is referenced ...

  4. Redis事务和分布式锁

    Redis事务 Redis中的事务(transaction)是一组命令的集合.事务同命令一样都是Redis最小的执行单位,一个事务中的命令要么都执行,要么都不执行.Redis事务的实现需要用到 MUL ...

  5. 使用after伪类清除浮动

    使用after伪类清除浮动 .department li:after{ content:"."; height:0; visibility:hidden; display:bloc ...

  6. bootstarp(carousel)组件

    ##### 1.5.1.Bootstrap中轮播图插件叫作Carousel ##### 1.5.2.基本的轮播图实现 ```html <!-- 以下容器就是整个轮播图组件的整体, 注意该盒子必须 ...

  7. SqlServer导库语句

    GO /****** 对象: StoredProcedure [dbo].[sp_ExportDatabase] 脚本日期: 07/18/2013 12:37:26 ******/ SET ANSI_ ...

  8. 多线程11_张孝祥 java5的线程锁技术

    本例子因为两个线程公用同线程中,使用同一个对象,实现了他们公用一把锁,实现了同一个方法的互斥. package locks; /** *会被打乱的效果 */ public class LockTest ...

  9. javascript中对象的不同创建方法

    javascript中的对象与一般的面向对象的程序设计语言(c++,Java等)不同,甚至很少有人说它是面向对象的程序设计语言,因为它没有类.javaScript只有对象,不是类的实例.javascr ...

  10. poj2459 Treasure Exploration (闭包+二分)

    这道题是让求派出机器人的最少数量,乍一看以为是简单的求最小路径覆盖,后来发现错了,因为有的点可以走多次,而二分中每个点只能走一次,所以要先用floyd进行传递闭包,然后用二分 #include< ...