自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

樂元素CTO凌聰訪談:游戲引擎技術(shù)選型之王道

移動(dòng)開發(fā)
Cocos2d-x是目前最流行的移動(dòng)游戲引擎。除了獨(dú)立開發(fā)者和小團(tuán)隊(duì)之外,很多大公司也都用它開發(fā)游戲。近日,我們采訪到了樂元素的CTO凌聰先生,他將為我們講述大團(tuán)隊(duì)是如何部署和使用這套游戲引擎做開發(fā)的。

最近,EA DICE都把Frostbite引擎開出了一個(gè)叫Frostbite go的移動(dòng)版本。這不禁讓人心里有許多明悟:無引擎,不移動(dòng)。不加思索一口氣可以說出許多移動(dòng)游戲開發(fā)的引擎和技術(shù),從Unity、Unreal、 Cocos2d-x、Flash,再到幾乎無所不能的HTML5。對于游戲開發(fā)者來說,技術(shù)選型的空間非常寬泛。近日,我們采訪到了樂元素的CTO凌聰先 生,為我們分享了他們在游戲開發(fā)方面的寶貴經(jīng)驗(yàn)。

記者:你們是如何做技術(shù)選型的,談?wù)勔郧澳銈冇玫囊恍┓桨浮?/b>

凌:之前我們用過很多引擎和語言,包括HTML5、Flash、Unity、Cocos2d-iPhone、Cocos2d-x這幾個(gè)都用過。我們有另外一個(gè)項(xiàng)目組在用Unreal。

我覺得每個(gè)方案要看當(dāng)前的場合。我對當(dāng)前的HTML5技術(shù)還是持保留意見。目前來說,瀏覽器的部分可能會(huì)存在一些利益分配的問題,但未來Html5的發(fā)展還是有很大空間的。

[[74960]]

圖:樂元素 CTO 凌聰

蘋果要大力去推某個(gè)跨平臺(tái)游戲引擎,對他來說有什么好處?其實(shí)是沒好處,應(yīng)用跨平臺(tái)了,用戶就流失了。蘋果只是關(guān)心,在他的平臺(tái)上,能運(yùn)行什么應(yīng)用。用蘋果主推的API和功能去開發(fā)應(yīng)用,他才會(huì)幫你作App Store編輯推薦。

記者:您覺得選用HTML5或Native會(huì)對用戶有哪些影響?

凌:HTML5 能做得游戲還是有限的,比如你做個(gè)卡牌類游戲是可以。你做個(gè)性能要求不是很高的游戲還可以。用戶不關(guān)心你用那種技術(shù)實(shí)現(xiàn),他是看你游戲效果好不好,這是最 關(guān)鍵的。你效果不好,人家不會(huì)玩。我們以前做過一些嘗試,如果你要做一些特別華麗的游戲,HTML5目前性能還是不足的。很多東西需要你調(diào)用Native 接口去渲染。

記者:Flash技術(shù)呢?現(xiàn)在用他做游戲還有前途嗎?

凌:***,F(xiàn)lash當(dāng)時(shí)性能也一般, 很久以前,我們做了一款游戲,那款游戲基本上是城建類的游戲,從PC移植過來的。當(dāng)時(shí)使用的是Air3.1,還是非常粗糙的一個(gè)版本。我們把所有的動(dòng)畫全 閹割了,然后才可以運(yùn)行。它可以播一些動(dòng)畫,但在Pad上面,一個(gè)場景有50-60個(gè)動(dòng)畫,它就搞不定了。那個(gè)時(shí)候性能不好,現(xiàn)在改善了許多,市面上也有 一些游戲也用Flash去做。

另外Flash我們不想選的原因,是因?yàn)镕lash本身不是開源的。我想用個(gè)OpenGL ES,想用shader 得到更好的性能,當(dāng)時(shí)在Flash上很難做。它本身還是挺死板的,你一旦用了它,就等于把命都交給它了。再加上它是收費(fèi)的,從綜合因素考慮來看,他和 Cocos2d-x等2D 引擎相比了,沒有優(yōu)勢。

記者:說說你們?yōu)槭裁从肅ocos2d-x?

凌:以前 也試過Cocos2D-iPhone,我們***個(gè)項(xiàng)目是Cocos2D-iPhone做的,Cocos2D-iPhone挺好要用的,但是他只支持 iOS,沒有Android,我們***選型還是Cocos2d-x。我們當(dāng)時(shí)真的是所有的技術(shù)都試了一次。Cocos2d-x是個(gè)很棒的游戲引擎,它的跨 平臺(tái)特性正是我們需要的,一次開發(fā),可以部署到多個(gè)平臺(tái)之上。

***我們?yōu)槭裁丛趲讉€(gè)跨平臺(tái)引擎中決定選擇用Cocos2D-X呢?我們主要 有幾個(gè)方面的考慮。首先最重要的是性能,尤其安卓上的。Cocos2d-x在低端安卓機(jī)上也運(yùn)行很流暢,做同樣復(fù)雜度的游戲,比其他引擎跑起來快5~10 倍。HTML5性能不行,目前看來還無法做出我們想要的游戲。其次,可控性也是關(guān)鍵,對于閉源的商業(yè)引擎,到項(xiàng)目后期我們有些優(yōu)化根本就無法做進(jìn)去,它的 性能怎么樣我們就怎么樣,我們沒有辦法控制。于是我們就選擇了Cocos2D-X,性能好,開源的可以自己根據(jù)游戲去優(yōu)化,所以這個(gè)就是我們***的選擇。

#p#

記者:你們?yōu)槭裁聪矚g上腳本化,并且選擇了Lua語言?

凌:因?yàn)镃ocos2d-x里面也支持挺多的腳本引擎,包括Lua、JavaScript還有C++。大家都知道C++有很多內(nèi)存泄露、崩潰,很難解決。而且崩潰了也不會(huì)給你什么有用的Crash信息。

我們做游戲運(yùn)營,當(dāng)用戶的游戲Crash掉之后,我們要能拿到他的數(shù)據(jù)。為此我們自己打造了一整套Crash工具,從網(wǎng)上可以直接拿到Crash信息,分析用戶的堆棧。用了腳本引擎,就可以降低Crash率。

為 什么選擇了Lua,而沒有選擇JavaScript?因?yàn)镴S太復(fù)雜了,很難控制它。而整個(gè)的Lua就500K代碼,你自己吃透它非常簡單,沒幾行代碼就 讀完了。同時(shí)我們也自己改了一些腳本,加了一些函數(shù)。對于JavaScript語言來說,它的狀態(tài)機(jī)太復(fù)雜了。支持匿名函數(shù),又支持各種各樣的 Funtion,使得狀態(tài)機(jī)異常復(fù)雜,它的解析器也很復(fù)雜。我想我們會(huì)用更簡單的語言,那就是Lua。

[[74961]]

并且Lua和C貼的是最緊湊的,我們要寫個(gè)接口非常簡單。Lua也有許多插件,用Lua在Java、OC和C之間互相調(diào)用都非常簡單。

但 是Lua也不是沒有問題,它也有多線程的額問題,線程安全這塊你要自己解決。這塊技術(shù),Lua還是比較復(fù)雜的。但是Lua主要業(yè)務(wù)是邏輯,至于考慮到多線 程的問題,我們會(huì)有個(gè)專門的引擎組去解決,這是一隊(duì)技術(shù)***的程序員。游戲的邏輯會(huì)寫在機(jī)要線程里面,所以這方面關(guān)系不大。引擎組去做多線程的事兒,和我 們用到的Lua特性,關(guān)系不大。

對于游戲的開發(fā)人員,***不要去碰多線程的東西,多線程容易出錯(cuò)。這里的技術(shù)選型,主要考慮的:一個(gè)是性 能,一個(gè)是控制力。用Lua和C的效果基本上差不多,能有80%的效率。這也要看應(yīng)用的場景,如果你是密集型運(yùn)算,那可能性能還要差一些,但是 LuaJIT的加速已經(jīng)很快了。在iOS上性能提升5~6倍,在Android上可以達(dá)到60倍。

記者:這個(gè)Cocos2d-x和Lua定下來之后,你們都做了哪些工作? 

凌: 我們自己做的東西還是挺多的,我們自己做了Lua的調(diào)試器,我們用的是一個(gè)開源的ZeroBrane,在這之上自己修改的??梢哉f這是全世界最快的Lua 調(diào)試器,把我們的Lua調(diào)試器性能提高了120倍。支持symbols和文件的快速定位,支持Push to device,改善了智能提示。

另外,我們做了一個(gè)資源管理器,可以做到增量更新、安全下載、安全加載、動(dòng)態(tài)更新四個(gè)重要的功能。

比如在用戶的本地apk里面,某些文件比較比較舊了,需要從網(wǎng)上下載一個(gè)文件,系統(tǒng)需要有一個(gè)緩存目錄,去存放從遠(yuǎn)端下載的內(nèi)容,然后再更新到本地apk目錄里,這三個(gè)目錄的同步,就是資源管理器要做的事情。

現(xiàn) 在的游戲包一般都很大,100~200MB的有很多,甚至有的超過1GB了。所以說要做增量更新。我們有大小包部分,一般你先留一個(gè)小包,也看不同的市 場。比如說有些網(wǎng)絡(luò)好的市場,我們小包就行了。有些網(wǎng)絡(luò)差的市場,我們就用大包。未來游戲更新的時(shí)候,我們都可以用增量更新,不用重新下大包。

考 慮中國很多用戶用2G網(wǎng)絡(luò)下載不方便,所以在中國市場,肯定要用大包,有WiFi網(wǎng)絡(luò)的時(shí)候把整包下了就行。但是在日本市場,你完全可以用小包,十幾MB 的包,效果***。十幾MB的包一般來說,里面有基本的資源,讓你能進(jìn)去,有個(gè)首頁。進(jìn)去之后按場景下載,這個(gè)是按需下載。

你進(jìn)某個(gè)場景的時(shí) 候,突然有個(gè)人冒出來,他騎了條龍,你邊沒有這個(gè)資源,你需要從遠(yuǎn)端下載完了之后,他才能夠穿上去。這里面就有個(gè)問題,游戲希望這個(gè)人能出現(xiàn),但是這個(gè)人 出現(xiàn)的時(shí)候他沒資源,怎么辦?一般的做法是這個(gè)人先裸身,先別穿什么東西,就是一個(gè)簡單的樸素裝。后臺(tái)從遠(yuǎn)程下完之后,再把它穿上去,這就叫做動(dòng)態(tài)加載。

我們是參考git的設(shè)計(jì)去做資源管理器的,今后如果可能,資源管理器其實(shí)完全可以基于git去做,這樣更方便靜態(tài)資源的部署.

記者:那么游戲每次啟動(dòng)的時(shí)候,需要做哪些版本校驗(yàn)?zāi)兀?/b>

凌: 首先,我們的游戲內(nèi)容,會(huì)有幾個(gè)存儲(chǔ)的地方。一個(gè)是apk/ipa中的存儲(chǔ),一個(gè)是CDN的存儲(chǔ);一個(gè)存儲(chǔ)是存放更新文件的本地存儲(chǔ)。配置在服務(wù)器上有個(gè) 配置版本號(hào)。游戲啟動(dòng)后,會(huì)去調(diào)這個(gè)配置服務(wù)器找版本號(hào)??磁渲冒姹咎?hào)是不是跟我們本地的配置版本號(hào)一樣。如果一樣,你就不用去更新配置。如果不一樣,就 到靜態(tài)服務(wù)器去拉他的配置。

我們每次文件都是增量更新的,不會(huì)覆蓋原來的,我們文件名都不一樣。它會(huì)取這個(gè)配置,取完這個(gè)配置再跟本地的文件系統(tǒng)進(jìn)行一個(gè)對比。因?yàn)槲覀儽镜匚募到y(tǒng),為了保證他的一致性,全部是MD5校驗(yàn)。

上面剛才說了,一個(gè)是apk里面的存儲(chǔ),一個(gè)是Web上的存儲(chǔ),一個(gè)是Cache里面的存儲(chǔ)。資源管理器會(huì)管理各處的存放的數(shù)據(jù)。沒有就直接去下載。

#p#

記者:現(xiàn)在有許多SDK,統(tǒng)計(jì)的SDK、廣告條的SDK、各大運(yùn)營商的SDK等等。你們對SDK是如何管理的?現(xiàn)在我聽說Cocos2D-x引擎內(nèi)部,也在集成這個(gè),你怎么看?

凌: 觸控對Plugin-x的實(shí)現(xiàn)確實(shí)花費(fèi)了許多功夫,要在不同開發(fā)語言之間,做一個(gè)統(tǒng)一的SDK體系不容易,還要提供 C++,Lua,Java,Javascript的API,有N種語言接口。從他來講肯定是C語言先支持,然后再網(wǎng)上搞各種語言綁定是最靠譜的??梢韵胂?工程量相當(dāng)龐大。當(dāng)然,這對于開發(fā)者來說是極大的好事,一次可以部署多個(gè)SDK。

但我們的情況比較特殊,我們現(xiàn)在很多的收入來自海外,我們 經(jīng)常集成的Facebook SDK,它三天兩頭變一次,一個(gè)版本一次變,所以對于這種特殊情況,我們就無法用plugin-x了,只用Lua和Java自己封會(huì)簡單一些,容易應(yīng)對這 種頻繁變化的情況。遇到SDK發(fā)生改動(dòng)是很討厭的事情,應(yīng)為SDK是JAVA的SDK,它一變,我們就不能用增量更新了,只能更新整個(gè)包。

記者:觸控最近出了一個(gè)CocoStudio,你們是否用過了?感覺怎么樣?

凌: 我覺得Cocostudio想法挺好的,我也覺得Cocostudio他能夠做完善的肯定很好?,F(xiàn)在這個(gè)階段,我們用過還是覺得,一些功能還可以繼續(xù)完 善。當(dāng)然CocoStudio也有比較好的東西,我覺得是UI編輯器,它看起來挺酷的,它支持組件直接嵌套等功能。***是后面能開放出來讓我們游戲廠家自 己靈活定制。

[[74962]]

我 們現(xiàn)在有自己的UI編輯器,我們自己的UI編輯器基于Flash。因?yàn)槲覀兒芏喽际荈lash轉(zhuǎn)的。反正就是Flash做完原件,把Flash的東西導(dǎo)出 來,我們自己寫個(gè)插件把它導(dǎo)出來,所有的美術(shù)都是用原來的機(jī)制,包括原件的動(dòng)畫,全都是這樣,很容易導(dǎo)出來。我們自己也做過骨骼編輯器。

我們也比較關(guān)注CocoStudio的這個(gè)骨骼編輯器的和動(dòng)畫編輯器。我們現(xiàn)在使用的是一個(gè)叫Dragon Bones的骨骼編輯器,未來我們可能會(huì)用比較老牌的Bone。我覺得我們現(xiàn)在,還是愛用自己的輪子,畢竟對來說最熟悉嘛。

總結(jié)

對 于樂元素這樣有600人的大公司來說,其技術(shù)實(shí)力太強(qiáng)大了。他們追求***的可控性,追求***優(yōu)化的工作流,這樣才能發(fā)揮出這么多員工的整體實(shí)力。筆者能感 覺到,對于這樣龐大的團(tuán)隊(duì)來說,Cocos2D-x是一個(gè)非常優(yōu)秀的技術(shù)方案,跨平臺(tái)與高性能兼具。但為了實(shí)現(xiàn)自己對技術(shù)和結(jié)果的掌控,樂元素自己做了相 當(dāng)多的工作,部署了Cocos2D-x + Lua + Wax/LuaJava + Tolua++,自己用ZeroBrane改了個(gè)高性能調(diào)試器,自己做了資源管理器,自己做了Crash跟蹤系統(tǒng)。畢竟是大公司大團(tuán)隊(duì),在 Cocos2D-x的基礎(chǔ)上,還是有許多想象力和可發(fā)揮空間的。

同時(shí),我們也能感覺到,觸控在中小開發(fā)者方面,也給予了足夠多的扶持。CocoStudio就是***的例子。UI編輯器、場景編輯器、動(dòng)畫編輯器、策略編輯 器。CocoStudio工具集彌補(bǔ)了之前Cocos2d-X的工具缺失或者不全的局面。雖然目前市面上已經(jīng)出現(xiàn)基于Cocos2d-X的工具,有收費(fèi)也 有免費(fèi)。但是像CocoStudio這種一整套的游戲開發(fā)工具集并沒有。關(guān)鍵是整套的游戲開發(fā)工具集可以讓游戲開發(fā)的流程更科學(xué)規(guī)范,開發(fā)成本更低。我們 可以看到,CocoStudio對于許多大型開發(fā)團(tuán)隊(duì),也有許多可以借鑒的地方。最重要是的是,它方便了中小開發(fā)者,快速的開發(fā)出優(yōu)秀的跨平臺(tái)游戲。

責(zé)任編輯:徐川 來源: csdn
相關(guān)推薦

2009-06-29 18:22:43

TomcatJSP頁面

2019-12-12 10:58:37

Docker容器引擎

2013-04-18 11:01:10

手機(jī)游戲手機(jī)游戲引擎技術(shù)選型

2015-06-26 10:36:17

WOT2015

2013-04-19 02:06:58

手機(jī)游戲手機(jī)游戲引擎技術(shù)選型

2015-06-02 15:12:22

樂檬

2013-07-25 09:21:23

2010-05-19 10:48:39

虛擬化與云計(jì)算訪談何樂

2010-05-19 11:03:05

虛擬化與云計(jì)算鄒志樂

2012-12-24 08:50:21

iOSUnity3D

2011-07-25 13:59:25

IT技術(shù)周刊

2013-04-19 01:42:02

2020-06-17 15:44:47

技術(shù)研發(fā)架構(gòu)

2015-07-20 13:06:37

孫宇聰

2012-10-17 13:45:51

網(wǎng)絡(luò)·安全技術(shù)周刊

2015-12-03 17:46:08

2011-05-03 16:41:23

內(nèi)網(wǎng)安全

2011-05-31 13:18:14

51CTO 熊平 新

2011-07-18 11:07:12

iPhone 游戲 引擎
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)