1、H5遊戲開發的引擎介紹
開發H5遊戲的引擎有很是多,比方egret、laya、cocos-js等等。這裏主要是分析的是egret和laya,因爲咱們團隊是從as3轉過來的。css
因此自然地在有as3基因的egret和laya之中挑選一個。編程
Egret api
Egret Framework是一款使用JavaScript(TypeScript)編寫的HTML5開源免費遊戲框架。核心定位是開放,高效,優雅。基於它,你可以高速輕鬆地構建屬於本身的HTML5移動遊戲。markdown
Laya,這裏主要就是LayaAir了。框架
LayaAir是Layabox旗下第二代HTML5開源引擎,是全球性能最高的HTML5引擎之中的一個。
LayaAir突破性的將2D、3D、AR、VR和頁遊、Native手遊、HTML5遊戲等諸多需求經過一個引擎得以統一。眼下引擎已被騰訊、Forgame、37玩、仙海、胡萊、蝴蝶互動等200多家知名廠商採用。編程語言
2、選擇引擎的思路
關於egret和laya誰比較好。比較適合。性能
各自的評判的標準都不同。反正他們都各自說得本身很是好,加上自己沒有實際用過,因此選擇起來看也很是爲難。優化
因此這裏也僅僅是提出我本身的觀點。僅僅是依據詳細的項目、團隊等狀況來作個選擇。再者他們官方都有提倡或者標籤本身如何高效如何好用,性能如何如何。但是沒實際踩過那些坑,還真很差評判。
使團隊最小代價進行轉型,團隊原先是AS3頁遊團隊,有豐富的AS3頁遊開發經驗以及相關的代碼積累,因此但願可以利用到這些原有的優點,使得可以高速上手。高速出項目。
ActionScript3頁遊但願有強類型的編程語言。否則純js這樣的沒強類型的語言,對於開發大型遊戲項目來講簡直是噩夢。
決定使用TypeScript語言
- 有比較完畢的工具鏈。從開發的IDE,到資源製做管理等
- 開放源代碼,而且有良好的開發文檔。有第三方庫或者方便支持第三方庫
- 活躍的論壇和客服,有問題可以直接進行詢問解決實際生產中遇到的問題
3、Egret和Laya的相似性
- 支持TypeScript語言來編寫
- 有自帶的IDE工具。可以進行斷點調試,帶有Web服務和二維碼。
都是基於Visual Studio Code這個工具進行擴展的,因此二者長得很是像。左邊是Egret,右邊是Laya Air
3. 都是對AS3程序友好。egret是很是大部分繼承as3系統。as3上大部分api它都有。laya也算是大部分繼承as3。經典常用的類都有。
如下是AS三、Egret、Laya的部分API圖
二者的渲染體系以及基礎API都很是相似,原來的AS3程序猿可以輕鬆上手。
4. 都有支持AS3代碼直接轉TypeScript的工具(後來實際使用發現這個轉換工具沒什麼用,最後移植的代碼都是純手打)
4、Egret和Laya的情況
egret成名比較早,發展得比較快,各方面的資源而比較多。也有大神的添加,利用它開發遊戲的廠商也會比較多。
配套也比較齊全。各類工具都有,但是給人感受是大而不精的樣子。都有各類各樣的問題。
IDE Wing以及TextureMerger比較常用。其它的僅僅有依據項目需要的時候纔會用。
laya相對出名比較晚,工具和資金也會相對缺少一些。
5、終於選擇
說真的。Egret當時也是認爲很是好。通過網上相關資料搜尋比較和細緻考慮。終於選擇了Laya。僅僅能依據搜索一些信息來綜合評價。感受感性會多一些。
說下主要緣由:
1. laya的社區比較活,客服回覆速度快,有問題直接問客服。那邊也積極回答。
2. 從網上獲得的一些消息,都是說egert作小遊戲的比較多,作大型的遊戲的話,仍是laya好一點。而且官方也說專門作大型遊戲的。
(這點沒經考證的。網上聽說)
3. 另一個決定因素是咱們以前as3頁遊的時候。ui框架是採用mornui。
laya官方自帶就是mornui。加上咱們用egret的時候。很是不習慣他們的eui框架。
(我認爲這個是最基本的緣由。其它的性能什麼的,終於都是編譯h5,因此預計區別不會很是大。剩下的就是開發體驗和ui工具的便捷性了)
4. 感受盡管laya很是大程度模仿了as3的api。但是會對當中一些繁瑣的部分進行了優化和改進。使用起來也方便和舒服很是多。
比方事件監聽至關簡潔 on和off取代了以及添加了once
Egret代碼: egret.IEventDispatcher
public addEventListener( type:string,listener:Function ,thisObject:any ,useCapture:boolean ,priority:number ):void
public removeEventListener( type:string,listener:Function ,thisObject:any ,useCapture:boolean ):void
再看Laya的代碼:laya.events.EventDispatcher
public on(type:String, caller:*, listener:Function, args:Array = null):EventDispatcher
public off(type:String, caller:*, listener:Function, onceOnly:Boolean = false):EventDispatcher
- Laya事實上是支持用AS3語言開發,儘管團隊有人認爲使用這個不錯,成員過渡零成本。但是我仍是否決了,認爲再繼續寫AS3沒什麼意義了。仍是要學一些新的語言活躍思惟會更好。固然更重要的是使用通用的TypeScript。也方便移植到其它引擎(這個真的很是正確呀)。
6、後記。神轉折
上面列了很是多理由來讓團隊選擇Laya。好像很是合理。然並卵。
在決定使用laya以後,咱們高速地開發出了一個aprg的demo,同一時候移植了as3的基礎庫和mvc框架。而後沒多久,投資運營方要求咱們換成Eerget,理由也很是easy。運營商那邊要求咱們使用Egret。因爲Egret看起來高大尚很是多,各類工具也很是齊全(儘管很是多工具。但是實際開發,實用的真心很少)。最重要的是他們運營的幾款都是基於Egret開發的,他們同一時候也在同Egret開發產品,爲了方便以後的交流以及相關的運營經驗,因此要求研發這邊使用Egret。
好在,咱們前期開發的大部分都是基礎庫,用的是TypeScript語言,因此切換回Egret的代價也不大。最後,咱們採用了Egret做爲咱們開發H5遊戲的引擎。因而開發繼續了。