爲何沒有好用的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

相關文章
相關標籤/搜索