游戏编程十年总结(下)(转)
生活随笔
收集整理的這篇文章主要介紹了
游戏编程十年总结(下)(转)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
游戲編程十年總結(jié)(下)(轉(zhuǎn))
一、總結(jié)
一句話總結(jié):看完作者的文章,我的感悟是:不到頂尖,終成廢土,而且我要是不居安思危,不能夠明確自己的處境和社會的競爭,必掛無疑。
這樣的故事,真的需要多看。
作者的編程人生經(jīng)歷真的使這篇文章我要好好細(xì)看。
?
?
?
二、游戲編程十年總結(jié)(下)
? ? 游戲編程十年總結(jié)的上篇總結(jié)了前五年初學(xué)編程的經(jīng)歷,下篇總結(jié)的是開始工作之后的經(jīng)歷,前面五年算是一帆風(fēng)順,而接下來的經(jīng)歷,則充滿了挫折與失敗。
第一份工作
? ? 由于學(xué)歷不高,還沒畢業(yè),經(jīng)驗(yàn)不足讓我吃了不少閉門羹,在大三剛開始時就開始在網(wǎng)上投放簡歷了,但基本是石沉大海。雖然沒有面試邀請,我還是獨(dú)自一人來到了深圳,因?yàn)閷ι钲谶@個城市很有好感(因?yàn)榍懊鎭砩钲诒荣惖慕?jīng)歷)。為了得到面試的機(jī)會,我不惜跑到人家的辦公樓去霸王面,可惜并沒有獲得面試的機(jī)會,但現(xiàn)在回想起來,直闖人家的辦公樓要求霸王面的時候,還是蠻有魄力的,雖然沒有拿到面試機(jī)會,但年輕人就該如此,想做的事情就放膽去做,不要逃避,不要讓自己后悔。 ? ??初來深圳時,已經(jīng)在深圳做了幾年游戲開發(fā)的梁師兄對我很是照顧(過來深圳比賽時認(rèn)識的),在深圳晃蕩了一周之后,終于否極泰來,接到了兩個面試通知,面試的過程很順利,也學(xué)到了不少東西,兩邊的面試官都對我挺滿意的,拿到了一份轉(zhuǎn)正后3K的3D客戶端開發(fā)Offer和一份試用期4K的C++服務(wù)端Offer,于是我選擇了后面的那份Offer,除了因?yàn)樾劫Y高些之外,上班的地方在師兄附近(后來住的地方也在師兄附近)。 ? ? 在工作的第一年里學(xué)習(xí)到了非常多的知識,網(wǎng)絡(luò)編程和Linux服務(wù)器開發(fā)是我從未接觸過的,幾乎是從入門到熟練掌握服務(wù)器開發(fā),這段時間的進(jìn)步比以往任何時候都要快。在入職之前BOSS就給我描繪了一下美好的未來,C++服務(wù)端這個部門現(xiàn)在就你和另外一個工作一年的程序,但是馬上會有3位經(jīng)驗(yàn)豐富的大牛入職,其中有超過10年經(jīng)驗(yàn)的大神,而且我們還有一位非常強(qiáng)力的技術(shù)支持——于彤,來自博雅的服務(wù)端大神,他為我們提供了一套高并發(fā)的服務(wù)端底層框架,雖然他只是偶爾來客串一下,但卻給了我非常大的幫助,也很大程度上影響了我,他的話不多,但每句都很受用。在認(rèn)識的人中他的技術(shù)幾乎是最好的,但也是最謙虛的,他的頭銜是架構(gòu)師,但他說他只是一個程序員。 ? ? 首先復(fù)習(xí)了網(wǎng)絡(luò)編程的基礎(chǔ),并將其搬到linux上,這是我把linux玩得最溜的一年,在于彤的指點(diǎn)下看完了《APUE》《Unix網(wǎng)絡(luò)編程》《TCP/IP詳解 卷一》等著作,大學(xué)時看《TCP/IP詳解》如讀天書,但在了解網(wǎng)絡(luò)編程之后再看這本書反而津津有味,下班之后沒有其他事情,獨(dú)自回到白石洲的農(nóng)民房里就是看書。為了解答疑惑、解決問題而學(xué)習(xí)比起普通的系統(tǒng)學(xué)習(xí)效率要高得多,因?yàn)槟繕?biāo)非常明確。 ? ? 在工作中還了解了sql以外的nosql數(shù)據(jù)庫,如memcached、redis、mongodb等等,讓人大開眼界,在于彤的指點(diǎn)下,自己依葫蘆畫瓢用epoll+單線程非阻塞的模式寫了一個簡單的服務(wù)器框架,用這個框架實(shí)現(xiàn)了一個負(fù)載均衡的服務(wù)器,于彤看后贊賞有加,跟我重申代碼要簡潔,這個詞深深刻入了我的腦海里。那時寫的服務(wù)器能在數(shù)萬并發(fā)連接的生產(chǎn)環(huán)境中穩(wěn)健運(yùn)行,是一份非常寶貴的經(jīng)驗(yàn),像什么遠(yuǎn)程調(diào)試,core和日志的分析,性能瓶頸分析也是那時候總結(jié)下來的經(jīng)驗(yàn)。 ? ? 后面在讀過于彤的底層框架、memcached和libevent等開源代碼之后,自己又寫了一個開源的迷你服務(wù)器框架,之后包括現(xiàn)在的項(xiàng)目,用的都是這套框架在開發(fā)。如何設(shè)計(jì)分布式的服務(wù)器架構(gòu),來保證服務(wù)器的可擴(kuò)展性,保證每臺服務(wù)器的功能單一簡潔,滿足一些跨網(wǎng)關(guān)的實(shí)時轉(zhuǎn)發(fā)的交互需求等等,這又是另外一份寶貴經(jīng)驗(yàn)。一個靠譜的后端程序員需要擁有能夠解決各種問題的能力,與前端程序員不同,后端程序員更多是靠經(jīng)驗(yàn)堆起來的,沒有經(jīng)驗(yàn)的后端程序員連可能會遇到什么問題都不知道。 ? 后端主程 ? ? 在公司待了一年,只為公司的一個頁游開發(fā)了一個PVP系統(tǒng),之后由于沒有項(xiàng)目做,閑得發(fā)慌。由于和主程相處的不是很融洽,所以也就打算離開了,他的脾氣火爆,不尊重人,并且不喜歡承擔(dān)責(zé)任,在項(xiàng)目中解決了他的不少BUG,例如死循環(huán)、內(nèi)存泄漏等等。記得他曾使用strlen來判斷一個結(jié)構(gòu)體的長度,向他指出這個錯誤之后,他跟我扯我不懂操作系統(tǒng)內(nèi)核實(shí)現(xiàn)的原理,于彤知道后笑了,說那你讓他講講操作系統(tǒng)內(nèi)核是怎樣實(shí)現(xiàn)這個原理的?;鸨獾闹鞒倘サ狡渌局?#xff0c;聽那邊的朋友說,他的火爆脾氣一點(diǎn)沒改,并且還掌握了使用挖掘機(jī)挖坑的高級技巧。 ? ? 過完年,部門發(fā)生了巨大的變化,C++開發(fā)部的兩個大神就離開了。本來我也打算離開了,拿到了Double薪資的Offer,但由于是做Java,心里并不是太愿意。然而在準(zhǔn)備提離職之前,公司讓我做后端主程負(fù)責(zé)一個新的MMO手游項(xiàng)目的后端開發(fā),我一下子就來精神了,這顯然比寫Java要好得多,這可是領(lǐng)導(dǎo)對我的信任啊!而且如果去新公司的話,我上班得多踩10分鐘的自行車吧。開新項(xiàng)目的同時,新的血液也注入了進(jìn)來,有3個小伙子進(jìn)入了我們部門,其中的穗智小師弟后來成為了我最得力的助手,但有一個小伙子表現(xiàn)不佳,怎么帶都沒帶好,后來他轉(zhuǎn)行去做測試了,主管問我,他不是我面試的嗎?他是怎么通過我面試的?我說面試的時候,我出的各種題目他都答得很好啊,其他人都沒答對,就他答對了呀。直到前幾天想起這個問題才恍然大悟,面試時是在他們的培訓(xùn)機(jī)構(gòu)面試的,一群人在外面輪流面試,只準(zhǔn)備了一份面試題,前面的人答錯了,我都會跟他們講解一下,估計(jì)最后一個進(jìn)來的他,已經(jīng)了解了所有的面試題...... ? ? 于彤說主程并不是要自己成功,而是要幫助下面的每一個人取得成功,這樣才是成功。所以后面招了一些新人進(jìn)來的時候,我總會花比較多的時間進(jìn)行培訓(xùn),當(dāng)大家都能獨(dú)當(dāng)一面的時候,主程也就輕松了。磨刀不誤砍柴工,幫助其他人進(jìn)行提升,也是磨刀。新項(xiàng)目的后端比較簡潔,人也不多,開發(fā)進(jìn)度也是穩(wěn)步向前,但前端的進(jìn)度看上去頗為糟糕,起碼從給我看到的一些代碼來看,算是耦合性較高,可讀性較差的代碼了。構(gòu)建在這樣代碼之上的程序,BUG自然也是頗多,這個做不了,那個無法實(shí)現(xiàn)。在這個項(xiàng)目中我在技術(shù)上并沒有多大的提升,只是默默地?cái)€著主程、管理的經(jīng)驗(yàn)值,包括如何規(guī)劃分配任務(wù)、溝通傳達(dá)、如何上政治課、如何給他們打氣加油、碰到問題幫忙解決等等。雖然是初任主程,但秉著負(fù)責(zé)的態(tài)度,基本上保證了后端的開發(fā)進(jìn)度穩(wěn)定快速。 ? ? 這一年因?yàn)榭傮w上比較悠閑,所以業(yè)余時間自學(xué)了一下Irrlicht和Ogre等3D游戲引擎,翻譯了Ogre的初級和中級教程,CEGUI的相關(guān)教程以及PhysicX物理引擎的官方文檔,并用OpenGL開發(fā)了一款物理冒險(xiǎn)游戲《小鐵蛋歷險(xiǎn)記》。在差不多年底的時候,還和師兄使用Cocos2d-x一起開發(fā)了一款ios手機(jī)游戲。 ? ? 然而又是過完年,項(xiàng)目組發(fā)生了巨大的變化,項(xiàng)目經(jīng)理、主策、客戶端程序紛紛離職,然后又空降了一波人過來,原先寫的代碼全部推翻,使用新的后端主程帶來的框架,項(xiàng)目重新開始...。新的后端主程也是一個經(jīng)驗(yàn)豐富的程序員,帶來了一套Windows的MMO服務(wù)器框架,什么東西都是現(xiàn)成的,需求大部分都是在這套框架上稍微改一改就做出來了,有點(diǎn)類似所謂的換皮,復(fù)制粘貼成為了最常用的開發(fā)技巧。但我并不喜歡做這些工作,也不喜歡開發(fā)Windows的服務(wù)器,與Linux相比性能要糟糕很多,在這里完成了一些簡單的模塊,吸收了框架里的一些經(jīng)驗(yàn)之后,我提了離職。 ? ? 這是一次裸辭,因?yàn)槲液鸵粋€美術(shù)同學(xué)(我稱他為淡總)使用Cocos2d-x一起開發(fā)一款病毒塔防游戲,想離職了好好把這款游戲做好,業(yè)余時間開發(fā)游戲還是蠻累的,但這款游戲是我目前為止做過最棒的游戲了,有強(qiáng)力美術(shù)的加盟就是不一樣。這次辭職并沒有成功,改為了請兩個月的假期,假期里基本將游戲的代碼寫完了,還接入了ShareSDK,但是淡總慫了,因?yàn)楹罄m(xù)要制作的各種關(guān)卡需要花費(fèi)的時間太多了,從關(guān)卡的設(shè)計(jì),到關(guān)卡中每個地圖的繪制,再到數(shù)值的調(diào)整,這些看上去還是需要一個專業(yè)的策劃才能搞定,于是這款游戲被擱置了。之后淡總提議用這套美術(shù)資源開發(fā)一些其他的不需要關(guān)卡的游戲,不要浪費(fèi),于是我們使用這套資源開發(fā)了病毒射擊和病毒消除小游戲,這兩個游戲都做完了,但是玩起來感覺很單調(diào),于是病毒射擊又改成了病毒射擊塔防,在病毒射擊的基礎(chǔ)上增加了很多新元素,設(shè)計(jì)了各種地形,各種道具,看上去游戲的可玩性增強(qiáng)了很多,但最后又回到了和病毒塔防一樣的問題,關(guān)卡、場景、數(shù)值.....結(jié)果這些游戲一個都沒出來。 ? ? 在這些小游戲的開發(fā)過程中,總結(jié)了不少經(jīng)驗(yàn),那時Cocos2d-x剛剛興起,資料還很匱乏,于是有了編寫Cocos2d-x書籍的念頭,小游戲不搞了,那就將Cocos2d-x積累的經(jīng)驗(yàn)寫成書吧。 U3D主程 ? ??結(jié)束兩個月的假期回到公司,就開始了打雜,這時手機(jī)游戲和手機(jī)游戲引擎Unity3D、Cocos2d-x正是非?;馃?/span>的時候,BOSS希望搭建一套通用的Unity3D底層框架,把游戲的規(guī)則抽象出來,每開發(fā)一個游戲都只需要繼承一些類,然后實(shí)現(xiàn)類里面的一些接口即可,這樣就可以很快的開發(fā)一款新游戲。但我完全沒有接觸過Unity3D,多次的開會討論都沒有得出一個好的結(jié)果,因?yàn)檫@種框架很虛,如果說有這樣一套框架的話,那不就是Unity本身嗎?最后只是用C#的委托實(shí)現(xiàn)了一套消息機(jī)制底層,另外由于原先U3D的網(wǎng)絡(luò)底層實(shí)在是太糟糕了,根本無法重用,于是實(shí)現(xiàn)了一套U3D通用的網(wǎng)絡(luò)底層框架,代碼非常地簡潔易用。后面這套消息機(jī)制和網(wǎng)絡(luò)底層被應(yīng)用在了公司的所有U3D項(xiàng)目上,MMO手游項(xiàng)目的新主程接手項(xiàng)目的時候,直接推翻了所有的代碼,只保留了這套消息機(jī)制和網(wǎng)絡(luò)底層,再后面一些這套消息機(jī)制和網(wǎng)絡(luò)底層也被應(yīng)用到了不少其他公司的項(xiàng)目上了,然而在代碼中關(guān)于作者和日期等注釋信息,卻被刪掉了......這種感覺就是,我寫的東西,變成了別人的了,再跟我沒有任何關(guān)系。 ? ? 編寫框架并沒有花費(fèi)我太多的時間,但為了設(shè)計(jì)好,為了簡潔好用,我投入的精力卻不少。業(yè)余時間仍然是和淡總他們一起開發(fā)著病毒系列小游戲。公司的一個主策建哥很有想法,很能忽悠,在他的忽悠下我和穗智小師弟也幫他開發(fā)了一些小玩意,穗智幫他開發(fā)了一個看美女圖片的應(yīng)用,穗智拿到建哥整理給他的性感美女圖片時,穗智吐槽了建哥“這樣的圖片我百度可以隨便找到一堆”,都是一些普通的泳裝美女圖片,這款手機(jī)軟件的功能,就是一張張地翻閱這些圖片,30張之后的每10張會有一個密碼。建哥打算回老家賣低端的安卓機(jī)器,順便推銷這款軟件,當(dāng)用戶需要看到心癢癢的時候,密碼輸入框彈出來了,然后用戶就要帶著手機(jī)過來找他,交錢之后,建哥偷偷地把密碼輸入進(jìn)去,就是這么一個商業(yè)模式,建哥說靠這款破軟件,他一年就可以進(jìn)賬100萬,雖然最后這款軟件一份都沒有賣出去,但建哥混的要比我們好得多,我還是主程,他已經(jīng)是四個輪子的CEO了。 ? ? 另外一個獨(dú)立開發(fā)手機(jī)游戲的小團(tuán)隊(duì)邀請我加入,他們策劃美術(shù)程序齊全,但我沒有答應(yīng),經(jīng)過了反復(fù)的游說,我答應(yīng)幫他們用Cocos2d-x搭建一個框架和基礎(chǔ)的Demo,僅僅是友情協(xié)助。在開發(fā)的溝通過程中,感覺并不是很靠譜,因?yàn)橛螒虿缓猛?#xff0c;美術(shù)不好看,很多東西反而要我去催。Demo如期交付了Demo,一段時間之后,這個團(tuán)隊(duì)解散了,因?yàn)?span style="color:#ff0000;">在開發(fā)的過程中有人還去接外單,當(dāng)這個團(tuán)隊(duì)解散時,項(xiàng)目的進(jìn)度仍然停留在我交付Demo的那一刻。這個團(tuán)隊(duì)的解散給了我很深刻的印象,要么不做,要做就全力以赴,兼職開發(fā)的這種小團(tuán)隊(duì),一個拖后腿全部完蛋!每個人都要有很強(qiáng)的責(zé)任心,對自己做的東西有強(qiáng)大的信心,主動往前才行,如果是由一個帶頭的推著整個隊(duì)伍前進(jìn),這樣是走不遠(yuǎn)的。不久之后,我和淡總的病毒游戲也告了一段落,大家都太累了,病毒系列的幾個項(xiàng)目的代碼沉睡在了硬盤上的某個角落。 ? ? 接下來學(xué)習(xí)了一下U3D,發(fā)現(xiàn)U3D這個引擎比Cocos2d-x成熟的地方太多了,了解了各種更加成熟的理念,C#這門語言用起來也非常爽快。我開始作為U3D主程負(fù)責(zé)一個項(xiàng)目,這是一款局域網(wǎng)對戰(zhàn)的項(xiàng)目,類似一個游戲平臺,內(nèi)部可以嵌套很多個小游戲,公司已經(jīng)做了一年多,已經(jīng)做爛了,原項(xiàng)目組的程序都跑去MMO的項(xiàng)目組了,于是從新招了2個U3D客戶端一起搗鼓這個項(xiàng)目。項(xiàng)目的代碼實(shí)在是非常糟糕,各種不規(guī)范,BOSS希望我在這個基礎(chǔ)上繼續(xù),然而我選擇了推翻重構(gòu)。因?yàn)轫?xiàng)目的業(yè)務(wù)邏輯都寫到了我的網(wǎng)絡(luò)底層框架里面了(像這種東西就該做成庫,不然他們改),原本這款游戲是可以單機(jī)和局域網(wǎng)對戰(zhàn),BOSS希望可以加入廣域網(wǎng)對戰(zhàn)的功能,但廣域網(wǎng)對戰(zhàn)暫不開發(fā)。我和兩個小伙伴花了2個多月的時間,只保留了原有的美術(shù)資源,所有代碼全部重寫,重新設(shè)計(jì)。并實(shí)現(xiàn)了一些新的功能,完成了這個項(xiàng)目!重構(gòu)之后的項(xiàng)目代碼簡潔,耦合性低,巧妙使用了消息機(jī)制,完成了單機(jī)版本之后,只花了1~2天,就把所有的小游戲?qū)崿F(xiàn)了局域網(wǎng)對戰(zhàn),再花上少量的時間,我們可以很輕松地實(shí)現(xiàn)廣域網(wǎng)對戰(zhàn)。雖然開發(fā)過程中換了3次人,來了又走,但我們還是按時完成了任務(wù),最后打包的那天,我們好像加班到了快2點(diǎn),這是加班的最高記錄。 ? ? 最后,這款游戲在商務(wù)階段,沒有了下文,又是一個無疾而終的項(xiàng)目,而這些絞盡腦汁寫出來的代碼,又在硬盤上的某個角落,沉睡了。 臨危受命 ? ? 項(xiàng)目失敗之后,又有去意,但此時已經(jīng)差不多是10月份了,想著過完年再說吧。離職的主管介紹了一份不錯的兼職,開發(fā)一款Cocos2d-x游戲,有點(diǎn)類似憤怒的小鳥吧,穗智小師弟跟我一起接了這個單子,大概花了3個月的業(yè)余時間比較輕松地完成了這款游戲,期間搭建了一個不錯的物理框架,設(shè)計(jì)好,代碼簡潔,開發(fā)效率自然高。游戲的美術(shù)和關(guān)卡設(shè)計(jì)都挺不錯的,我們簽了一份5萬塊的外包合同,然而游戲做完之后我們只拿到了4萬塊,因?yàn)樽詈蟮囊蝗f塊是要游戲上線之后才給,上線到Appstore時由于某個原因被打回來,然后這家公司就倒閉了......這個項(xiàng)目的代碼又在硬盤上的某個角落進(jìn)入了沉睡。 ? ? 在接外包之前,公司又開了一個新項(xiàng)目,這是一款精簡的多人在線大富翁游戲,主要是山寨一款PC上的大富翁,我們都覺得這款游戲很好玩,把它搬到手機(jī)上肯定有戲。于是我作為后端主程開始了這款游戲的后端開發(fā),當(dāng)前端還沒出Demo的時候,后端已經(jīng)完成了復(fù)雜的游戲邏輯,例如各種隨機(jī)事件的觸發(fā),并做了一個簡單的文本界面客戶端對服務(wù)端的邏輯進(jìn)行了測試。大富翁的后端邏輯不同于一般的后端,一般是一個請求一個響應(yīng),但大富翁的一個請求可能觸發(fā)的事件是不一定的,事件的流程也會隨著不同的環(huán)境發(fā)生改變,并且中間有可能導(dǎo)致玩家之間的復(fù)雜交互。游戲的邏輯完全跑在后端,前端只需要執(zhí)行少量的顯示邏輯即可。由于進(jìn)度超前,所以也有足夠的時間完成外包項(xiàng)目。 ? ? 到了發(fā)Demo版本的時間,前端的版本問題很多,延期了一兩周還是沒能順利給出版本。由于突發(fā)了一些我們并不知道的緊急情況,經(jīng)理對這次的延期有很大的意見,并決定親自操刀,他仔細(xì)閱讀了前端的代碼,并對一些代碼進(jìn)行了刪改,對前端的代碼提出了很多疑議,并整天坐在前端小伙伴旁邊看著他們寫代碼,要求每一行代碼都寫上注釋,前端幾乎停止了開發(fā),每天都在寫注釋。游戲也已經(jīng)完全跑不起來了..... ? ? 在前端小伙伴們奄奄一息的時候,經(jīng)理找到了我,想讓我把前端帶起來,我一聽嚇了一跳。原計(jì)劃是年前出一個Demo版本,年后一個月內(nèi)出一個Alpha版本,經(jīng)理希望我按照原計(jì)劃把版本趕出來,在會議室中幾個人對著我猛灌雞湯,仿佛我能推平山岳,扛起這一切,把這個項(xiàng)目帶向成功。而如果我拒絕,這個項(xiàng)目就進(jìn)垃圾桶了,難道我做的項(xiàng)目又不能上線了嗎???? ? ? 內(nèi)心掙扎了很久之后,終于把這碗雞湯干了。干完雞湯之后,我大概向經(jīng)理提了10個條件,包括不允許經(jīng)理再看前端代碼,以及坐在前端程序身邊看他們寫代碼??车袅艘恍┎槐匾墓δ?。給前端同學(xué)放一天帶薪假放松一下。給我一筆經(jīng)費(fèi),在過年的時候?qū)⒁恍┩瓴怀傻娜蝿?wù)打包,明碼標(biāo)價(jià),外包給前端程序去做,這些任務(wù)量并不繁重,但價(jià)格還算比較不錯的,這樣即可以在過年期間讓項(xiàng)目前進(jìn),又可以避免前端同學(xué)年后回來對代碼生疏了,需要重新花時間熟悉代碼。各種討價(jià)還價(jià)之后,雷厲風(fēng)行地扛起了前端項(xiàng)目的開發(fā),接下來Demo和Alpha版本都按照原計(jì)劃完成了。雖然名義上是前后端主程,但實(shí)際上后端的工作已經(jīng)完全丟給穗智小師弟了。 ? ? 版本完成之后,又是各種新需求和周邊系統(tǒng),包括AI和托管等麻煩的功能,大概是五月份左右,騰訊的天天富翁上線了,我一看,跟我們的游戲一樣,這對整個團(tuán)隊(duì)的打擊都很大,而過年前,經(jīng)理就已經(jīng)提前知道騰訊會代理這款游戲了,也就是這個原因,他才親自操刀。游戲接下來要做的功能已經(jīng)不多了,但游戲的前景卻是一片迷霧。之后開始對項(xiàng)目的前端框架各種優(yōu)化總結(jié),沉淀了一套通用的UI框架、資源管理框架以及新手引導(dǎo)框架。沉淀下來的框架簡單易用,而且靠譜,這歸功于長期基類下來的設(shè)計(jì)經(jīng)驗(yàn),以及在使用的過程中不斷地調(diào)整打磨,還有對模糊的技術(shù)點(diǎn)的徹底研究,例如?Unity AssetBundle爬坑手記,只有徹底搞清楚了,才可以更好地使用它。 ? ? 由于版權(quán)的問題,這個游戲最終還是沒有上線。這些代碼再次沉睡在了硬盤中。所以說,山寨并不靠譜,創(chuàng)新才是王道! ? ? 又是一段空閑期,我和淡總商量了一下,決定快速開發(fā)一款小游戲,于是我們開發(fā)了一款躲避類的游戲,類似宮爆老奶奶,為了能吸引到眼球,我們決定嘗試一下色色的主題,也就是卵子躲避精子,游戲命名為《避孕達(dá)人》,經(jīng)過精心的策劃之后,這款游戲上了一些安卓平臺。幾次優(yōu)化之后,我們都覺得可玩性還可以,打算就靠賣點(diǎn)廣告來賺錢,結(jié)果到現(xiàn)在就賺了21塊錢的廣告費(fèi),其中的20塊還是我自己點(diǎn)的廣告...... 一段有趣的面試經(jīng)歷 ? ? 接下來朋友推薦了一個Cocos2d-x的面試,面試官并不是很友善,大概就是這種“呵呵,你很牛逼是吧?”,然后就試圖在面試中把我難倒,問了一些主觀性的問題,兩個人的思路根本就不在同一個頻道上,例如我說搭建U3D的網(wǎng)絡(luò)框架,他說U3D的網(wǎng)絡(luò)底層框架有什么好搭建的?不就是個連接連上去就可以了嘛。我說提供對socket的封裝,異步請求,自動處理半包粘包,將tcp流分割為完整的包最后傳遞到客戶端主線程的一個服務(wù)處理對象中進(jìn)行處理。答完看上去他對半包粘包這些好像一點(diǎn)都不知道,追問了我一句,那你是如何處理TCP丟包的呢??然后我就不想討論這個話題了,TCP的定義講得很清楚,TCP提供可靠連接,TCP底層實(shí)現(xiàn)是可以保證不丟包的,我反問了一句你們又是如何處理TCP丟包的呢?他說很簡單啊,如果對方?jīng)]收到就循環(huán)發(fā)送,估計(jì)到了這里面試官已經(jīng)自動將我判斷為沒有處理TCP丟包經(jīng)驗(yàn)的程序員。例如說到將第一個U3D項(xiàng)目代碼推翻時,他問我為什么要推翻,我說因?yàn)?span style="color:#ff0000;">代碼耦合性太高了,游戲的業(yè)務(wù)邏輯都寫到我的網(wǎng)絡(luò)底層框架中,他說那說明你的框架設(shè)計(jì)得很糟糕(這個功能完全不需要寫在框架中,框架的接口足夠?qū)崿F(xiàn)這個功能的,也許是這個框架無法處理TCP丟包,所以真是糟糕啊)。例如問了我一個特別泛的問題,大意是如何設(shè)計(jì)一個框架,我說這個要根據(jù)需求來啊,你可以現(xiàn)場提需求,我來設(shè)計(jì),他堅(jiān)持讓我回答這個問題,我也只能回答一些比較泛的答案,然后他說不對,我問他那正確答案是什么?他說是抽象和封裝......要不是看在我朋友的面子上,我真想抽他! ? ? 本來我想通過這次面試,來積累點(diǎn)面試經(jīng)驗(yàn),補(bǔ)充一下自己的不足,沒想到會變成這個樣子,接下來他開始問了我一些Cocos2d-x和Box2d的問題,我有氣無力地回答著他,扯了這么久,水都不給喝一杯,我都困了。反正我也不想和他共事,又學(xué)不到什么新的東西,就想草草結(jié)束這次面試了。接下來HR妹子和他一起來跟我聊,HR說他們的技術(shù)對我已經(jīng)有了一個了解,雖然我了解的東西挺多的,但都不精通。嗯,我點(diǎn)點(diǎn)頭,我確實(shí)離精通還很遠(yuǎn)。HR接著說到我的Cocos2d-x經(jīng)驗(yàn)比較欠缺,還沒有到達(dá)一定的水平。我愣了一下,剛剛明明Cocos2d-x相關(guān)的問題一個都沒難倒我好嗎,并且有些問題我還提出了比他們現(xiàn)在更好的實(shí)現(xiàn)方式,我已經(jīng)用Cocos2d-x做了四五個游戲了,我那本Cocos2d-x的書也已經(jīng)完成了第一次重構(gòu)了,引擎的代碼更是讀了N遍,你可以說我其他的什么不精通,但你就算問我Cocos2d-x引擎底層的渲染流程我都可以給你詳細(xì)地說出來。我真想拽拽地對面試官說一句,那就請你隨便問一些Cocos2d-x的問題,來難倒我好嗎?但我克制住了自己,因?yàn)闆]有意義,點(diǎn)了點(diǎn)頭說道,確實(shí)對Cocos2d-x不怎么熟悉。然后他們問我薪資要求,我說了一個14K。HR說我們覺得你不值這個價(jià)格,11K怎么樣?我點(diǎn)了點(diǎn)頭,嗯,確實(shí),如果我對Cocos2d-x熟悉一些的話,應(yīng)該會好一點(diǎn)。后來HR打電話勸我過去,說面試官覺得我還是可以培養(yǎng)的,轉(zhuǎn)正之后,如果你表現(xiàn)好的話,還是有可能拿到這個薪資的,我婉言謝絕了。 ? ? 后面,我?guī)н^的一個小師弟意外地去到了這家公司面試,被格外器重,我不知道當(dāng)時的面試官還在不在,只知道他們給小師弟開了12K。 ? Cocos2d-x主程 ? ? 在2014年的年底,公司又開了一個新項(xiàng)目,是一款實(shí)時橫版競技塔防手游,我兼任Cocos2d-x主程和后端主程,游戲的進(jìn)展還算比較順利,在這個項(xiàng)目中又沉淀了大量的經(jīng)驗(yàn)和一套好用的框架,踩了Cocos2d-x大量的坑,使用一套通用簡單的方案解決了實(shí)時同步的錯誤糾正以及斷線重連等等(后面有空會寫一篇文章分享一些實(shí)時同步的經(jīng)驗(yàn)),相比起項(xiàng)目剛開始時的設(shè)想手機(jī)網(wǎng)游實(shí)時同步方案,經(jīng)歷實(shí)踐之后的方案更加地成熟。 ? ? 和策劃們一起用心打磨這款游戲的戰(zhàn)斗系統(tǒng),實(shí)現(xiàn)了非常多的玩法,支持策劃配置各種特色關(guān)卡,例如雙方爭奪某個要塞,例如護(hù)送某個角色到達(dá)指定位置等等。各種擁有特殊能力的兵種都可以通過策劃配置出來,不需要程序調(diào)整代碼,類似LOL妖姬的標(biāo)記,LOL大發(fā)明家的安置炮臺,還有分身、閃現(xiàn)、傳送、魅惑、隱身、召喚、復(fù)活、放逐等等一堆亂七八糟的功能,都可以配置出來。游戲關(guān)卡中的戰(zhàn)斗場景也支持豐富的互動,例如一個寒冰法術(shù)打過去會順帶凍住場景后的植物,例如一個火焰爆炸開場景中的植物也會被灼燒,甚至旁邊的石塊也會被炸飛,這些都可以通過策劃配置出來。開發(fā)的氛圍很好,沒有出現(xiàn)推卸責(zé)任這樣的情況,大家一起認(rèn)真地討論著某個功能的實(shí)現(xiàn),怎樣能讓它有更好的體驗(yàn)。 ? ? 開發(fā)了一年左右,皇室沖突強(qiáng)勢上線了,這意味著我們做不了首款實(shí)時競技的策略手游了,或許會被套上山寨的帽子,或許山寨皇室沖突的游戲會爛大街,從而影響到我們游戲......,所以我們必須把游戲做得更好,比皇室沖突更好!誰說國人就只會山寨? ? ? 通過不斷地打磨,關(guān)卡副本和PVP玩起來已經(jīng)算是比較有意思了。直到現(xiàn)在,游戲終于到了最后的尾聲,周邊系統(tǒng)也基本完善,估計(jì)一兩個月內(nèi)就可以發(fā)布最終的版本,希望這款傾注了我們大量心血的游戲到時能夠順利上線吧,皇室沖突的成功也證明了手機(jī)上的即時策略游戲是大有可為的,如果這樣一款有特色、有創(chuàng)意、玩法有趣、注重品質(zhì)和細(xì)節(jié)的游戲都能失敗的話,我真不知道怎樣的游戲才能成功了。(為避免廣告嫌疑,現(xiàn)在手上的項(xiàng)目就不詳細(xì)介紹了,也不上圖) ? ?在繁忙的工作中,我完成了第一本Cocos2d-x書籍,這是第三次的推翻重寫。每次寫了一段時間之后,回過頭看之前寫的文章,頓時覺得慘不忍睹,必須推翻重寫,或者是Cocos2d-x的接口又改了,或者是自己能力的提升推翻了之前的一些想法??傊?span style="color:#ff0000;">不想將就,就得重構(gòu)!就這樣斷斷續(xù)續(xù)地寫了三年多,直到最近這本書終于出版了。雖然希望做到極致,但能力有限,精力有限。中間看著Cocos2d-x的出版物逐漸多了起來,有過停筆的想法,但最終還是堅(jiān)持了下來,這個過程比想象中要難得多了,但語言組織能力、表達(dá)能力都能得到很大的提升,對于要表述的技術(shù)點(diǎn)也清晰了很多。寫書不易,經(jīng)常加班的IT人寫書更是不易,有了這么一個經(jīng)歷之后,對一些寫得不是很好的書籍,我也不會去吐槽它了。大概在項(xiàng)目上線的時候,第二本Cocos2d-x的書也該交稿了。第一本書介紹了Cocos2d-x的基礎(chǔ),雖然是基礎(chǔ),但有很多點(diǎn)還是挖得比較深,例如指針、內(nèi)存、紋理、渲染等。這些往往是一些初級程序掌握得不好的點(diǎn),相信對于基礎(chǔ)不扎實(shí)的同學(xué)會有很大的幫助。第二本的內(nèi)容要比第一本精彩得多,聽了網(wǎng)友紫蝦的建議,把第二本寫成了一本雜文集,深入總結(jié)了Cocos2d-x實(shí)際開發(fā)中的各種技術(shù),例如跨平臺開發(fā)的相關(guān)知識、實(shí)時同步游戲的前后端開發(fā)、Cocos2d-x的各種調(diào)試技巧、Shader、裁剪遮罩、加密解密、分辨率適配、Lua、Spine等等一系列實(shí)用的內(nèi)容。甚至開發(fā)了一個類似U3D編輯器一樣,可以實(shí)時調(diào)試Cocos2d-x游戲內(nèi)容的界面工具,這些內(nèi)容都是實(shí)際工作中一點(diǎn)點(diǎn)總結(jié)出來的心血結(jié)晶。在征得出版社同意的前提下,接下來會將書中的一些章節(jié)發(fā)布到博客中。 ? ? 當(dāng)完成書和項(xiàng)目之后,會有一段難得的空閑時間,可以好好陪陪家人,可以好好寫寫博客,可以好好踢踢球,可以把駕照考了。接下來也許會找一些志同道合的朋友繼續(xù)做一些獨(dú)立游戲,也許會好好學(xué)習(xí)一下如何編寫操作系統(tǒng),或者是研究一下Arduino,或者深入地學(xué)習(xí)一下算法,這些東西都非常有趣。 轉(zhuǎn)自:游戲編程十年總結(jié)(下) - 深圳-寶爺 - 博客園https://www.cnblogs.com/ybgame/p/5481400.html
轉(zhuǎn)載于:https://www.cnblogs.com/Renyi-Fan/p/9859390.html
總結(jié)
以上是生活随笔為你收集整理的游戏编程十年总结(下)(转)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: fio
- 下一篇: Android Studio:missi