1. 程式人生 > >開發H5牛牛大廳遊戲引擎的選擇:Egret或Laya?

開發H5牛牛大廳遊戲引擎的選擇:Egret或Laya?

cti visual 回復 pre 開發經驗 中一 程序 進行 社區

Q1446595067官網:h5.haozibbs.com
一、H5遊戲開發的引擎介紹

開發H5遊戲的引擎有很多,比如egret、laya、cocos-js等等。這裏主要是分析的是egret和laya,因為我們團隊是從as3轉過來的。所以天然地在有as3基因的egret和laya之中挑選一個。

Egret

    Egret Framework是一款使用JavaScript(TypeScript)編寫的HTML5開源免費遊戲框架。核心定位是開放,高效,優雅。基於它,你可以快速輕松地構建屬於自己的HTML5移動遊戲。
    https://www.egret.com/

Laya,這裏主要就是LayaAir了。

    LayaAir是Layabox旗下第二代HTML5開源引擎,是全球性能最高的HTML5引擎之一。
    LayaAir突破性的將2D、3D、AR、VR和頁遊、Native手遊、HTML5遊戲等諸多需求通過一個引擎得以統一。目前引擎已被騰訊、Forgame、37玩、仙海、胡萊、蝴蝶互動等200多家知名廠商采用。
    http://www.layabox.com/

二、選擇引擎的思路

關於egret和laya誰比較好,比較適合。各自的評判的標準都不一樣。反正他們都各自說得自己很好,加上本身沒有實際用過,所以選擇起來看也很為難。
這裏寫圖片描述
所以這裏也只是提出我自己的觀點。只是根據具體的項目、團隊等情況來做個選擇。再者他們官方都有提倡或者標簽自己如何高效如何好用,性能怎樣怎樣。但是沒實際踩過那些坑,還真不好評判。

使團隊最小代價進行轉型,團隊原先是AS3頁遊團隊,有豐富的AS3頁遊開發經驗以及相關的代碼積累,所以希望能夠利用到這些原有的優勢,使得能夠快速上手,快速出項目。
ActionScript3頁遊ActionScript3頁遊

希望有強類型的編程語言,不然純js這種沒強類型的語言,對於開發大型遊戲項目來說簡直是噩夢。決定使用TypeScript語言
有比較完成的工具鏈,從開發的IDE,到資源制作管理等
開放源碼,而且有良好的開發文檔,有第三方庫或者方便支持第三方庫
活躍的論壇和客服,有問題可以直接進行詢問解決實際生產中遇到的問題

三、Egret和Laya的相似性

支持TypeScript語言來編寫
有自帶的IDE工具,可以進行斷點調試,帶有Web服務和二維碼。都是基於Visual Studio Code這個工具進行擴展的,所以兩者長得非常像。左邊是Egret,右邊是Laya Air
這裏寫圖片描述

這裏寫圖片描述

  1. 都是對AS3程序友好。egret是很大部分繼承as3系統,as3上大部分api它都有。laya也算是大部分繼承as3,經典常用的類都有。下面是AS3、Egret、Laya的部分API圖
    這裏寫圖片描述
    兩者的渲染體系以及基礎API都非常類似,原來的AS3程序員可以輕松上手。
  2. 都有支持AS3代碼直接轉TypeScript的工具(後來實際使用發現這個轉換工具沒什麽用,最後移植的代碼都是純手打)
    四、Egret和Laya的狀況

egret成名比較早,發展得比較快,各方面的資源而比較多,也有大神的加入,利用它開發遊戲的廠商也會比較多。配套也比較齊全,各種工具都有,但是給人感覺是大而不精的樣子,都有各種各樣的問題。IDE Wing以及TextureMerger比較常用,其他的只有根據項目需要的時候才會用。

laya相對出名比較晚,工具和資金也會相對缺乏一些。
五、最終選擇

說真的,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

1

public removeEventListener( type:string,listener:Function ,thisObject:any ,useCapture:boolean ):void

1

再看Laya的代碼:laya.events.EventDispatcher

public on(type:String, caller:*, listener:Function, args:Array = null):EventDispatcher

1

public off(type:String, caller:*, listener:Function, onceOnly:Boolean = false):EventDispatcher

1

Laya其實是支持用AS3語言開發,雖然團隊有人覺得使用這個不錯,成員過渡零成本。但是我還是否決了,覺得再繼續寫AS3沒什麽意義了,還是要學一些新的語言活躍思維會更好。當然更重要的是使用通用的TypeScript,也方便移植到其他引擎(這個真的很正確呀)。

六、後記,神轉折

上面列了很多理由來讓團隊選擇Laya,好像非常合理,然並卵。在決定使用laya之後,我們快速地開發出了一個aprg的demo,同時移植了as3的基礎庫和mvc框架。然後沒多久,投資運營方要求我們換成Eerget,理由也很簡單。運營商那邊要求我們使用Egret。因為Egret看起來高大尚很多,各種工具也很齊全(雖然很多工具,但是實際開發,有用的真心不多)。最重要的是他們運營的幾款都是基於Egret開發的,他們同時也在同Egret開發產品,為了方便之後的交流以及相關的運營經驗,所以要求研發這邊使用Egret。
這裏寫圖片描述
好在,我們前期開發的大部分都是基礎庫,用的是TypeScript語言,所以切換回Egret的代價也不大,最後,我們采用了Egret作為我們開發H5遊戲的引擎,於是開發繼續了。
這裏寫圖片描述

開發H5牛牛大廳遊戲引擎的選擇:Egret或Laya?