Ejoy2D是一款圖形引擎、基于C和Lua開發(fā),底層是一個十分簡單的核心層,基本上只負擔繪制工作,上層語言是Lua。Ejoy2D是國內(nèi)簡悅(EJOY)游戲公司所開發(fā)的一款游戲圖形引擎,旨在幫助開發(fā)人員輕松地嵌入到游戲引擎中,方便開發(fā)者定制自己所需的功能。遵循MIT開源許可。
托管地址: https://github.com/cloudwu/ejoy2d
CSDN記者聯(lián)系到了Ejoy2D項目負責人云風(微博:@簡悅云風),請他來分享Ejoy2D的開發(fā)歷程及他在游戲開發(fā)方面的感悟。
云風:真名吳云洋,曾任網(wǎng)易杭州研究中心總監(jiān),是網(wǎng)易《大話西游》、《夢幻西游》等游戲的主要開發(fā)者,他在2011年9月從網(wǎng)易辭職,并與前網(wǎng)易COO詹鐘暉聯(lián)合創(chuàng)辦了簡悅(EJOY)游戲公司,任公司CTO。
Ejoy2D項目負責人 云風
CSDN:Ejoy2D項目創(chuàng)建的初衷是什么?
云風:Ejoy2D的起源來自于我在2013年初玩到的一款叫Clash of Clans的移動平臺游戲,這讓我發(fā)現(xiàn)在移動平臺上,除了一個人玩的傳統(tǒng)游戲之外,還可以有非常有趣且結(jié)合移動平臺特性的游戲類型存在。在此之前,我們公司并沒有立刻開始移動平臺開發(fā)計劃;之后,我們迫切的想進入移動平臺游戲的開發(fā)領(lǐng)域。在經(jīng)過公司內(nèi)部的充分討論后,我們打算先模仿Clash of Clans做一款類似的游戲練手。我個人判斷,把這類游戲做好,客戶端開發(fā)有一定的技術(shù)門檻,不太容易做的好。而我在十多年前就開始做2D游戲引擎,很有自信可以為這款游戲定制一款新的、適應移動平臺開發(fā)的2D引擎。這就是Ejoy2D的開始。
在獨立開發(fā)了大約一個月后,從我們的PC端游戲組調(diào)出了一名同事,和我一起來制作這款新游戲。邊用邊對Ejoy2D提出新需求,并完善它。
到了2013年7月左右,我們的外包美術(shù)資源開始進入,這時,我們又從外部招聘了一名同事專門為 Ejoy2D定制美術(shù)工具。這樣才慢慢完善了工具鏈,最終把游戲做了出來。這款游戲就是現(xiàn)在的陌陌爭霸。
從一開始,我就希望把引擎開源。因為之前我們開源的游戲服務器框架Skynet反響很好,幫助了不少朋友,同時開源也提高了代碼質(zhì)量,不少bug都是公司之外的同學發(fā)現(xiàn)的。這讓我們在自己生產(chǎn)環(huán)境碰到bug前就得以修正。
但一開始的Ejoy2D代碼很不穩(wěn)定,且充滿了為了游戲項目能快速完成而臨時添加的補丁,所以直到我們的陌陌爭霸基本完成。后來,我花了大約2周時間全部重寫了Ejoy2D的代碼,覺得可以與大家見面了,就公布了代碼,并發(fā)布了開源的消息。接下來,我們內(nèi)部有兩個新的項目組開始使用新版的Ejoy2D開發(fā)游戲,這兩個組都有同事開始為Ejoy2D貢獻代碼。
CSDN:與其它游戲引擎相比,比如Cocos2d-x,Ejoy2D有哪些與眾不同的地方?
云風:Ejoy2D其實是對OpenGL ES的一個淺封裝。我并不想把它發(fā)展成一個游戲引擎,而只停留在圖形引擎層面上。但和別的引擎相比較大的區(qū)別是,它天生為和Lua結(jié)合而設(shè)計并實現(xiàn)的。你幾乎不可能只使用Ejoy2D的C API ,而我鼓勵你只用Lua API在其上做開發(fā)。只有解決不了的需求時,再編寫一個供Lua調(diào)用的C模塊。由于這種設(shè)計,在使用方式上,Ejoy2D應該會比其它結(jié)合Lua腳本的引擎更高效些,使用起Lua API也會更自然。同時,Ejoy2D保留了很小的C內(nèi)核,代碼全部用很簡短的C實現(xiàn)。閱讀理解起來會比較容易,維護它更輕松一些。
CSDN:您們最近上線了一款手游,叫陌陌爭霸,在這款游戲中,Ejoy2D都做了些什么?
云風:陌陌爭霸的客戶端全部用Lua開發(fā),客戶端引擎就是用的Ejoy2D 。但Ejoy2D僅僅只是圖形引擎,所以我們還用C編寫了網(wǎng)絡(luò)模塊,資源打包的模塊等等。陌陌爭霸對AI方面還有比較高的性能需求,我們還用C語言為AI,士兵尋路編寫了一些代碼(在大部分其它類型游戲中,用Lua實現(xiàn)性能就夠了)。
由于陌陌爭霸開發(fā)的比較早,當時的Ejoy2D沒有現(xiàn)在的版本完善,所以陌陌爭霸組的同事在UI模塊、粒子系統(tǒng)上花了更多精力。這些在現(xiàn)在開源版本的Ejoy2D中,在引擎層面已經(jīng)做了更多的支持。
CSDN:對于使用Ejoy2D的用戶,您有哪些建議/經(jīng)驗告訴他們?
云風:最好能通過閱讀代碼來理解Ejoy2D的結(jié)構(gòu),明白它能解決什么問題。然后盡量只在Lua層面使用它。把需求提到開源社區(qū),大家來判斷該如何改進引擎適應不同的需求。對于很多引擎,通讀所有的代碼是件工作量很大的工作,但是Ejoy2D不同,它很簡短,花不了太多時間。
CSDN:從風魂引擎到Enjoy2D引擎,您在引擎和游戲開發(fā)方面有什么心得?您的設(shè)計思想和實現(xiàn)方式有什么變化?
云風:風魂是我大學時代的作品,到現(xiàn)在已經(jīng)有十多年過去了。當初我希望盡量幫助游戲開發(fā)人員解決所有問題,而現(xiàn)在不這么想了。我希望使用引擎的開發(fā)人員有足夠的選擇權(quán)。作為一個圖形引擎,應該盡量配合開發(fā)人員的選擇權(quán),盡可能的把引擎做成一個方便開發(fā)人員組裝的一個組件。
引擎的實現(xiàn)應該足夠簡單,并盡可能的隱藏需要引擎解決的技術(shù)細節(jié)。
CSDN:與開發(fā)PC游戲相比,開發(fā)移動游戲的痛點是什么?
云風:我并沒有正經(jīng)的開發(fā)過一款傳統(tǒng)的PC游戲,而我在意識里并不把MMO Game和傳統(tǒng)游戲歸為一類的。在移動平臺上開發(fā)游戲讓我找到了一些開發(fā)游戲的樂趣,我覺得比開發(fā)MMO游戲更加有趣。至于痛點,我覺得在國內(nèi)做游戲,或多或少的要迎合渠道的想法很討厭。比如說,我不希望我們的游戲需要玩家有一個賬號才能開始游戲,而各種國內(nèi)的平臺會強迫你接入他們的SDK ,需要玩家注冊賬號,然后才能開始游戲。
CSDN:從事游戲開發(fā)這么多年,您最大的感悟是什么?
云風:心無旁騖方能獲得無窮樂趣。
CSDN:您一直都在鼓勵大家開源,并且把自己的一些作品都開源出去了,這樣做給您帶來了哪些好處/樂趣?對其它開發(fā)者來說,把自己的作品開源出去有哪些好處?
云風:開源對自己毫無損失。反而會督促你把代碼質(zhì)量提高,設(shè)計時也需要考慮得更完善。如果有其他人使用,他們往往會以一種你不曾考慮過的方式來用,從而發(fā)現(xiàn)你發(fā)現(xiàn)不了的漏洞。這些漏洞可能是實現(xiàn)上的,也可能是設(shè)計上的。
CSDN:您已經(jīng)這么牛了,在這個圈子里,有您崇拜的技術(shù)大腕嗎?您認為這些人身上都有哪些特點?
云風:想不到 “崇拜” 這個詞能用在什么人身上,我不認同人和人之間產(chǎn)生 “崇拜”的這種情感。只能說我喜歡怎樣的人吧。我喜歡思維理性,有想像力,有執(zhí)行力,總能自己動手去解決問題的人。
以“啟蒙?開源”為主題的2014開源技術(shù)大會(Open Source Technology Conference 2014)將于3月30日在北京召開,目前公開征集演講議題,歡迎各路開源大俠積極參與。屆時云風將親臨現(xiàn)場,分享他多年的開源開發(fā)經(jīng)驗,歡迎大家來領(lǐng)略大神的風采。