新版本的Cocos2d-x引擎在跨平臺游戲開發(fā)、打造完整的工具鏈、包含完整開發(fā)流程方面,做了更進(jìn)一步的嘗試。
觸控科技近日發(fā)布了Cocos2d-x 3.0 RC版本,主打開放、原生、創(chuàng)新路線。作為全球三大游戲引擎之一,Cocos2d-x吸引了國內(nèi)外一批優(yōu)秀的開發(fā)者和游戲作品,包括《放開那三國》、《刀塔傳奇》、《BadLand》、《勇者斗惡龍》、《Dragon City》、《Line Play》等。新版本的Cocos2d-x引擎在跨平臺游戲開發(fā)、打造完整的工具鏈、包含完整開發(fā)流程方面,做了更進(jìn)一步的嘗試。為了更全面地了解Cocos2d-x 3.0的性能特性,《程序員》日前對觸控科技副總裁、Cocos2d-x游戲引擎作者王哲進(jìn)行了專訪。
Cocos2d-x 3.0的性能優(yōu)化
《程序員》:較之上一個版本,Cocos2d-x 3.0在哪些方面做了改進(jìn)?
王哲:在Cocos2d-x 3.0中,我們著重改進(jìn)了一些很基礎(chǔ)的工作,從之前發(fā)布的alpha版本來看,大家最關(guān)心的主要圍繞三點(diǎn):性能、兼容性(尤其是Android手機(jī)的兼容性)、CPU和內(nèi)存消耗。在性能方面,我們優(yōu)化最好的是自動技術(shù),當(dāng)一個游戲場景大出手機(jī)屏幕很多時,引擎會自動幫你把屏幕之外的東西給剔除掉,這使大場景游戲的流暢度有2~8倍的提升。另一個是模擬合并,從技術(shù)支持的反饋來看,有50%的開發(fā)者不懂得如何使用這個功能,而在3.0中,該功能可以自己判斷是否開啟,并且性能已非常接近于手動調(diào)試。在提升兼容性方面,我們測試了200款A(yù)ndroid機(jī)型,較之2.2版本的85.71%,3.0版本的兼容性達(dá)到了90.71%。至于CPU和內(nèi)存消耗,3.0比2.2版本的啟動時間縮短了25%,CPU的平均占用率也降低了36%。
《程序員》:除了性能上的優(yōu)化外,在具體的功能上你們做了哪些工作?
王哲:我們首先從新的渲染器著手。Cocos2d-x的核心結(jié)構(gòu)就是場景結(jié)構(gòu)樹,它由一個根節(jié)點(diǎn)延伸出許多子節(jié)點(diǎn)(如圖1所示),如果根節(jié)點(diǎn)向右移動200個像素,它的子節(jié)點(diǎn)也會跟著旋轉(zhuǎn)200個像素。這種設(shè)計(jì)的局限性在于,由于Draw節(jié)點(diǎn)和Visit節(jié)點(diǎn)非常緊密,要訪問某個節(jié)點(diǎn)就必須先畫這個節(jié)點(diǎn),由此造成批量渲染功能難以實(shí)現(xiàn)。而且如果想跨平臺,就需要所有節(jié)點(diǎn)都支持新平臺。我們建立了一個新的組件,它里面有一個渲染隊(duì)列,每個節(jié)點(diǎn)都會發(fā)布它的渲染指令,這樣,我們就可以分解Draw命令、Visit訪問節(jié)點(diǎn),實(shí)現(xiàn)批量渲染,并且所有OpenGL都會集中在渲染器里,所以,實(shí)現(xiàn)跨平臺非常容易。其次是新的API,Cocos2d-x的代碼中會看到一些Sprite C的用法,但它和C++是不同的語言,于是,我們將它改成了更符合C++程序員使用習(xí)慣的方式。例如,我們把2.0中使用的CCSprite改成了Sprite,用不同的命名空間來為Sprite命名。
《程序員》:有哪些修改和功能是來自開發(fā)者的反饋?
王哲:Critical Bug肯定是最先要修改的,此外還有平臺不兼容,以及3.0中的XCode最新版本,有些開發(fā)者直接編譯時掛掉了,這些問題肯定要優(yōu)先解決。其他的還包括易用性,比如開發(fā)環(huán)境、Custom Draw以及Coding IDE等,這些功能都是大量開發(fā)者反饋需要的,所以我們就做出來了。
《程序員》:Cocos3d-x與Unity 3D引擎的主要區(qū)別是什么?
王哲:2D引擎發(fā)展到現(xiàn)在,表面上看其實(shí)都差不多,3D引擎也類似,最后拼的還是性能、效率,以及是否能用它做出比較炫的畫面效果。Cocos3d-x發(fā)展到今天,至少做出了像《捕魚達(dá)人3》這樣比較炫酷的游戲,有這樣一款產(chǎn)品來驗(yàn)證它。可以說,在穩(wěn)定性、高性能這些方面,我們已經(jīng)做得很好了,但在易用性上,說實(shí)話,差距還是挺大的,畢竟編輯器這些是Unity 3D的優(yōu)勢,但框架方面我們做得更好。
《程序員》:在技術(shù)實(shí)踐中,有哪些團(tuán)隊(duì)對Cocos2d-x引擎的理解和操作堪稱范例?
王哲:確實(shí)有一些,比如像《忘仙》和《君王2》。他們改掉了一些東西,如在TextureCache里增加警戒線,達(dá)到某個警戒線就觸發(fā)一個回調(diào),在回調(diào)里面釋放掉一些資源,通過這種方式來保證它的內(nèi)存不會爆。不過這對于一般休閑類游戲的作用不大,我沒有添加這個功能主要是不想增加引擎的復(fù)雜度。另一個是《刀塔傳奇》,他們的技術(shù)人員很有意思,他們?nèi)绻苯佑肍lash Dragon Bone格式導(dǎo)出,引擎可以直接解析。但他們覺得不爽,就自己寫了一個Flash插件,把Flash里的骨骼動畫導(dǎo)出到Cocos2d-x里解析出來。所以這款游戲里的動作打斗場景都是他們自己做的一套。
增強(qiáng)培訓(xùn),與開發(fā)者共贏
《程序員》:你們與開發(fā)者通過怎樣的方式進(jìn)行交流?
王哲:我們的Issue System是開放的,開發(fā)者認(rèn)為哪里不好,可以直接提交任務(wù)。我們每天都會有人去查看,如果某個問題提出的人多的話,我們會馬上分配開發(fā)團(tuán)隊(duì)去做,這是一種很好的交流方式。此外,CocoaChina上有幾萬個帖子,我們也長期有專人維護(hù),對開發(fā)者提出的問題進(jìn)行統(tǒng)計(jì),針對高頻問題我們會馬上修改。
《程序員》:除了外語教材外,你們在海外推廣和對海外用戶的技術(shù)支持方面還有哪些舉措?
王哲:在推廣方面我們做的不多,只會定期公布一些用Ccocos2d-x引擎開發(fā)的熱門游戲的名單。在對海外用戶的支持方面,目前,Cocos2d-x的教材已包含中、日、韓、英、西五種語言版本。在接觸方面,應(yīng)該還是跟日韓的開發(fā)者接觸多一點(diǎn)(因?yàn)橛螒蝻L(fēng)格和地理位置與中國都比較接近),比如2013年11月在韓國舉辦的開發(fā)者沙龍等。此外,日本有一個自發(fā)Cocos2d-x學(xué)習(xí)社區(qū)叫“知友會”,他們會定期組織一些活動。2013年12月我和林順參加了他們組織的線下沙龍并做了分享。另外,他們還會幫我們把社區(qū)里的文檔翻譯成日語,以便更好地幫助本土開發(fā)者。
《程序員》:在你們與高校的合作中,Cocos2d-x課程的設(shè)置及合作模式是什么樣的?
王哲:整個課程設(shè)置的核心圍繞著Cocos系列工具,包括Cocos2d-x和CocoStudio等。但很多學(xué)生不僅想學(xué)習(xí)知識,還非常關(guān)注行業(yè)動態(tài)、開發(fā)流程,甚至游戲運(yùn)營等問題?;诖?,我們共設(shè)置了9門課程,從游戲的開發(fā)概論、行業(yè)數(shù)據(jù)分析、游戲策劃、美術(shù),一直到游戲運(yùn)營。每個部分按單元來劃分,每個單元32個課時。另外,我們還與學(xué)校合作,建立了實(shí)訓(xùn)基地,讓學(xué)生可以實(shí)際體驗(yàn)游戲開發(fā)的全過程。如果有人想創(chuàng)業(yè),我們也會提供技術(shù)和資金上的支持。