zoukankan      html  css  js  c++  java
  • 为什么没有好用的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手机厂商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

    00

  • 相关阅读:
    [MacOS]Sublime text3 安装(一)
    [RHEL8]开启BBR
    PAT Advanced 1136 A Delayed Palindrome (20分)
    PAT Advanced 1144 The Missing Number (20分)
    PAT Advanced 1041 Be Unique (20分)
    PAT Advanced 1025 PAT Ranking (25分)
    PAT Advanced 1022 Digital Library (30分)
    PAT Advanced 1019 General Palindromic Number (20分)
    PAT Advanced 1011 World Cup Betting (20分)
    PAT Advanced 1102 Invert a Binary Tree (25分)
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/4004934.html
Copyright © 2011-2022 走看看