自《圍住神經(jīng)貓》等游戲風靡以來,越來越多的人開始關(guān)注html5游戲的開發(fā)和未來的發(fā)展。于是,一個新的html5游戲開發(fā)引擎——Egret(白鷺引擎)應(yīng)運而生。
在諸位看官進入正文前,我先澄清一下,我的回復(fù)不會就以下幾個問題展開討論:
1. HTML5有沒有未來;
2. 開源好還是閉源好;
3. Web,Hybrid和Native哪家好;
4. 2D沒3D牛B。
我想單就Egret本身而言,給出我關(guān)于以下幾個問題的想法。
■ Egret為何用TypeScript?為何不用Dart, AtScript或者其他?
TypeScript(TS)是一個嚴格意義上JavaScript超集,而且它目前的1.4版本的語言設(shè)計更接近于ES6,如果只是單純認為TypeScript是微軟出的一個開源語言的,請認真去http://TypeScriptLang.org,深入了解一下這個開源項目,了解以下微軟的首席架構(gòu)師為何會針對JavaScript做了這么個玩意。
那么為何Egret會選用TS呢?
首先,我們認為Dart的形式針對很多會使用JS或AS3的開發(fā)者而言(尤其是初學者這個最大的群體),學習的成本曲線較陡,而谷歌又是一個在技術(shù)上“太過”創(chuàng)新的公司,跟隨一個有可能“朝令夕改”的技術(shù)去制作一款產(chǎn)品,而且將整個Egret的工具和服務(wù)的體系都懸于它之上,實在有些讓我坐臥難寢。谷歌的AtScript的目標又過于宏大,瞄準了ES7,但是就目前的H5的技術(shù)推進而言,下一個JS的標準是看齊ES6。我們想做一款創(chuàng)新好用的產(chǎn)品,但是首先我考慮的是先要創(chuàng)作一個能用的產(chǎn)品?;氐絋S,它目前版本是1.4,即將在2015出現(xiàn)2.0,語言的結(jié)構(gòu)設(shè)計無限趨近與ES6的標準,有了module,有了Proxy,還會有很多更類似于ActionScript3.0的語法。微軟還提供了一個TS的編譯器,可以在編譯時為開發(fā)者提供很多幫助,而且我相信以微軟的實力,做個編譯器的水平還是很高的。目前的JavaScript恰恰有很多設(shè)計層面和開發(fā)層面的缺陷,TS都能或多或少的彌補這些問題。選用TS這個開源項目,能再現(xiàn)階段很好的幫助JS開發(fā)者創(chuàng)作更有規(guī)模,更成熟,更有質(zhì)量的游戲項目。
其次,我們可以用TS基于Canvas來封裝跟Flash ActionScript3.0的API結(jié)構(gòu)設(shè)計,而且,我們僅僅封裝對于游戲有幫助的部分。我在Adobe的10多年,全部鋪在了Flash產(chǎn)品和技術(shù)上,F(xiàn)lash是個龐然大物,當初Flash團隊之所以放棄AS3到AS4,AVM2到AVM3的項目,很大程度上是Core的部分太復(fù)雜了,經(jīng)歷了幾代架構(gòu)師和開發(fā)的調(diào)整,升級重構(gòu)的成本已經(jīng)無法估量,簡單來說,就是當時沒人改的了,所以,我們也不可能投入研發(fā)去自己做一個complier或者virtual machine去讓AS3交叉編譯為JS,君不見Adobe曾經(jīng)宣布的AS3到JS的Falcon交叉編譯項目,3年了都沒動靜,最后隨同F(xiàn)lex一起捐給了Apache基金會么。Egret的API設(shè)計只是借鑒模仿了Flash AS3里跟游戲有關(guān)的API部分,做了減法,因為Egret Engine的定位不是想讓開發(fā)者拿去既可以做廣告,又可以做minisite,又可以做Video,又可以做游戲。我們只想在core上保持精簡,如果開發(fā)者對不同的游戲類型有需求,比如狀態(tài)機,物理,粒子等等,都做到了core之外的game library里。我2014年初離開Adobe時候,中國還有接近30萬的Flash開發(fā)者,其中90%是游戲相關(guān),這是一個寶貴的開發(fā)者社區(qū)群體,他們對于Web頁游的開發(fā)和理解遠遠超過了任何使用其他web前端技術(shù)做網(wǎng)頁游戲的群體。Egret使用TS,一方面是為了讓JS游戲開發(fā)人員更舒服些,另一方面是考慮到Flash AS3這個開發(fā)群體,不爭取的話,慢慢都流失掉了,很可惜。下圖是我們Egret Engine在API設(shè)計上與Flash AS3 API上的對比。
第三,我們使用TS,還有一個想法。將來的JS也是遲早會跟ES6看齊的,等將來所有瀏覽器都統(tǒng)一支持下一代JS的時候,現(xiàn)在使用Egret的開發(fā)者都已經(jīng)熟悉了ES6那套做法,而Egret幾乎可以0成本的直接將TS換為下一代JS的代碼,平滑過渡所有開發(fā)者,比JS現(xiàn)有體系過渡到下一代的體系成本都低,更順滑,何樂而不為?
■ 為什么我們2014年一口氣做了一堆工具,而沒有一上來就做個集成的開發(fā)環(huán)境呢?
我在這里要回答的有2點。在技術(shù)和產(chǎn)品的進化上,第一條真理是:天下武功,唯快不破。第二條是,長鞭理論無處不在。第三條是:工作流是工作效率提升的根本。以上三條重要性依次降低,當一個CTO和CIO做了產(chǎn)品形態(tài)和研發(fā)的決策時,請倒推。好了,不講大道理,說一說Egret的做法,Egret里我?guī)У倪@幫人以前是做Flash Pro,F(xiàn)lash Builder,F(xiàn)lex GUI和眾多工具及框架的技術(shù),很有經(jīng)驗。但是經(jīng)驗不能完全當做生產(chǎn)力,經(jīng)驗不能當飯吃。經(jīng)驗告訴我們的是,要想在市場立足,在最短時間內(nèi)做出來的產(chǎn)品的“核”也就是中心思想很重要,它不必拘泥于是否先要有個IDE來承載這種形態(tài),市場需要的是最有效率的工作流,其次才是一招打遍天下的IDE集成開發(fā)環(huán)境,工作流的形態(tài)可以先出現(xiàn)在最初的若干款產(chǎn)品里,他們之間獨立,小巧且專注,之間的數(shù)據(jù)通用且可以協(xié)作,對于研發(fā)而言,成本和風險均可控制。而IDE,功能強大且齊全,開發(fā)者需要的功能都具備,但是研發(fā)成本高,風險大,周期長。按照Egret Engine的雙周迭代速度,團隊潛心于一上來就要打造一個IDE的節(jié)奏是不對的。就好像你希望快走,但是又總有一條腿邁不出去的情況一樣,這個節(jié)奏的結(jié)果就是容易扯著蛋。但是2015年,我們也會做出一個第一版的IDE,叫Egret Builder.
■ 說了引擎和工具,Egret你們想怎么商業(yè)化呢?
商業(yè)化的問題其實在這里我不想說太多,我只想說,我們除了引擎,工具,我還讓團隊做了個運行時。也就是將來Egret的技術(shù)體系就是三位一體,Engine,Tools,Runtime。關(guān)于Runtime的細節(jié),我也不想多談,大家可以去http://egret-labs.org看看Egret Runtime的產(chǎn)品介紹頁,就明白我們?yōu)樯兑槍5做個Runtime。很多明眼人一看就會說,這不就是個Flash Player么?!答案是Yes,也是No。
Yes的部分是我們的團隊原來都是做Flash的,受Flash影響頗深。Flash Player里具備很多優(yōu)秀的Web游戲設(shè)計思想都是很贊的,我們就想我們可以用C/C++和OpenGL圍繞著這些設(shè)計思想,再做一個取代webview的游戲加速器,讓開發(fā)者基于Egret引擎開發(fā)的H5游戲,可以直接通過這個Runtime加速。No的部分是Flash Player是to C的,要讓用戶去裝,而Egret Runtime是to B的,集成到平臺app里,作為一個庫,當用戶在平臺里玩游戲時候激活,玩家是不知道Egret Runtime存在的,我們也不打算對玩家去刷什么存在感。Egret Runtime是為了解決H5游戲性能,適配,系統(tǒng)底層調(diào)用和碎片化的問題而生的一個產(chǎn)品。在Egret Runtime上,我們跟各大平臺的合作關(guān)系也很融洽,為什么?因為我們就是他們平臺內(nèi)部的一個組件,生命周期受平臺app的控管,你激活我,我就干活,你移除了我,我就進入sleep模式,絲毫不影響人家平臺業(yè)務(wù),還能提高H5游戲的用戶體驗,也不騷擾用戶,何樂而不為?尤其在Android上,一個activity級別的控件是讓平臺恐懼的,而一個view模式下的控件,平臺是喜歡的。下圖是Egret Runtime的HighLevel架構(gòu)圖:
■ Egret現(xiàn)在就是個2D的,木有競爭力?。?/strong>
近一年內(nèi),Egret Engine的確是2D的,但是大伙不都是以進步的眼光看待事物么?Egret也一樣,秉著天下武功,唯快不破的思路,我們規(guī)劃了一下2015年的Egret Next,我們也在預(yù)研3D的部分,code name是HummingBird(請原諒我們團隊就是喜歡鳥),更細節(jié)一點的計劃圖在這里:
當然,我們現(xiàn)在已經(jīng)開始做了一些了,不然我也不敢說出來找虐。
■ 說了半天,你們的套路到底是啥?
來看這張圖,我們想為H5或者叫做使用H5(JS/TS)技術(shù)的web游戲開發(fā)者打造這么一套環(huán)境:
所以,說H5移動游戲也好,說Web移動游戲也好,說用腳本開發(fā)native也好,工作流齊全了,這些還算是問題么?
我自己作為Egret的技術(shù)管理人,在我10多年的職業(yè)生涯里,信奉這么幾句話:
1. 永遠不要基于現(xiàn)在去假設(shè)未來;
2. 永遠不要嘗試用一個成功打敗另一個成功;
3. 預(yù)測未來的最好方式就是創(chuàng)造未來;
4. 就是干!