• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            posts - 14,  comments - 57,  trackbacks - 0

                    2011已經(jīng)謝幕了,現(xiàn)在都流行總結(jié),要是讓我總結(jié)2011,可以用2個(gè)詞來概括,辛苦、刺激。
            辛苦是因?yàn)?011基本上是加了一年班,從過完年開始,到2012年過年前最后一周,這一年來,是我感覺最辛苦的一年,好在最終
            項(xiàng)目算是打了個(gè)翻身仗,心里總算有了些慰藉。

                   2011年游戲經(jīng)歷從技術(shù)封測(cè)、內(nèi)測(cè)、公測(cè)到整改、重新內(nèi)測(cè)公測(cè),一路走來,遇到無(wú)數(shù)稀奇古怪的Bug,
            有時(shí)候壓力大的時(shí)候,晚上都睡不著,腦子里回想著現(xiàn)場(chǎng)的一絲絲蛛絲馬跡,希望能找到bug的原因,經(jīng)歷過無(wú)數(shù)次絕望到重生的喜悅,也有被猜忌不信任的痛苦,活脫脫就是一部部偵探劇情。
              沒有從事過游戲開發(fā)或者游戲沒上線的同學(xué)很難理解:bug有這么難找嗎?的確,如果是簡(jiǎn)單的空指針宕機(jī),當(dāng)然是好找的,用我們的話,這類問題是個(gè)傻子都能解決(其實(shí)不然,很多時(shí)候直接原因是空指針,
            真正的原因隱藏很深),但是更多的是隱藏很深的問題,需要反復(fù)的分析現(xiàn)場(chǎng),假設(shè)劇情才能得到靈感,然后推演,才可能得到結(jié)果,當(dāng)然,這個(gè)和游戲邏輯的復(fù)雜度是分不開的。
              具體的bug細(xì)節(jié)不便在此分析,但是大部分的問題,其實(shí)都是因?yàn)椴徽5脑O(shè)計(jì)引起的,所以其實(shí)我一直在思考,在軟件開發(fā)領(lǐng)域,其實(shí)也存在著"道",說通俗點(diǎn)叫客觀規(guī)律,不按照道行事,遲早是要受到懲罰的。
            但是在游戲后臺(tái)開發(fā)中,很多時(shí)候存在不同技術(shù)方案的矛盾,難以讓人取舍,這些矛盾都是真實(shí)在很多項(xiàng)目存在的。

            動(dòng)態(tài)內(nèi)存還是靜態(tài)內(nèi)存

                  很多開發(fā)者由于擔(dān)心內(nèi)存泄露,在項(xiàng)目中禁止使用動(dòng)態(tài)內(nèi)存(當(dāng)然這實(shí)際上幾乎是做不到的),使用對(duì)象池來避免動(dòng)態(tài)內(nèi)存,就是預(yù)先創(chuàng)建預(yù)計(jì)最大數(shù)量的對(duì)象,后續(xù)申請(qǐng)和歸還的時(shí)候,都是操作對(duì)象池,
            避免動(dòng)態(tài)new和delete。這樣的項(xiàng)目還不少,我見過的就好幾個(gè)。對(duì)象池的好處是顯而易見的,基本上可以避免內(nèi)存泄露。但是實(shí)際上,這種方式是把雙刃劍,個(gè)人覺得在游戲項(xiàng)目中,這種方式弊大于利。
            主要弊端有下面幾點(diǎn):
            1、開發(fā)不方便,導(dǎo)致需要添加很多的對(duì)象池管理類,即使有模板幫忙,也是非常繁瑣的。實(shí)際開發(fā)中,幾乎不可能對(duì)這些小對(duì)象類都搞一個(gè)對(duì)象池管理類。

            2、由于采用預(yù)先生成對(duì)象,一般會(huì)預(yù)估一個(gè)對(duì)象可能存在的最大數(shù)量,然后按照最大數(shù)量來創(chuàng)建,浪費(fèi)內(nèi)存。
              的確,你沒有內(nèi)存泄露,但是你啟動(dòng)的時(shí)候就需要好幾個(gè)G的內(nèi)存,這個(gè)是內(nèi)存浪費(fèi),好在現(xiàn)在server開發(fā)基本都是64位,沒有地址空間的困擾了,但是,在大部分情況下浪費(fèi)好幾個(gè)G的內(nèi)存,
            光想想都有點(diǎn)心疼。

            3、引入了新的風(fēng)險(xiǎn),由于采用對(duì)象池,申請(qǐng)新對(duì)象的時(shí)候,只是簡(jiǎn)單的pop一個(gè)空閑對(duì)象就可以了,很容易漏掉對(duì)象初始化的工作,在回收對(duì)象的時(shí)候,大部分開發(fā)者也很容易漏掉清理工作,或者初始化和
            清理工作過于簡(jiǎn)單,這樣容易導(dǎo)致新對(duì)象被歷史操作影響。曾經(jīng)遇到過一個(gè)新FB所有傳送點(diǎn)都打不開的問題,就是因?yàn)闅v史對(duì)象回收時(shí)數(shù)據(jù)沒清理導(dǎo)致的。

                回頭來看對(duì)象池的優(yōu)點(diǎn),很多開發(fā)者堅(jiān)持是為了解決內(nèi)存碎片和內(nèi)存泄露。先說內(nèi)存碎片,暫且不說內(nèi)存碎片真的是否有這么嚴(yán)重,退一步,其實(shí)內(nèi)存碎片已經(jīng)有很多的成熟解決方案了,自己重載smallObject還是
            采用標(biāo)準(zhǔn)的tcmalloc解決,都是非常輕松的。至于內(nèi)存泄露,個(gè)人覺得這個(gè)問題其實(shí)是很好查的,也是c++程序員的基本要求。

            分模塊針對(duì)接口編程還是一鍋粥

                 這個(gè)問題單獨(dú)提出來,幾乎所有人都會(huì)說,當(dāng)然是分模塊針對(duì)接口開發(fā)了。和天下所有的事情一樣,知易行難。由于游戲邏輯項(xiàng)目影響的地方非常多,比如死亡的時(shí)候,既需要判斷死亡掉落,又需要處理任務(wù)狀態(tài),
            如果在戰(zhàn)場(chǎng)和競(jìng)技場(chǎng)中,還要判斷基數(shù)和得分等等,這就導(dǎo)致很多開發(fā)者不假思索的把所有的東西都揉在一起,你中有我,我中有你,我改你的代碼你改我的。
            一個(gè)最簡(jiǎn)單的例子,我在項(xiàng)目中開發(fā)掉落功能,當(dāng)把物品添加到玩家背包后,發(fā)現(xiàn)客戶端沒有更新背包,一查,居然還需要掉落的開發(fā)者自己構(gòu)造數(shù)據(jù)包同步客戶端,其實(shí)作為其他模塊,根本不關(guān)心背包數(shù)據(jù)同步的細(xì)節(jié)。
            這個(gè)其實(shí)在現(xiàn)實(shí)生活中很常見,我委托背包模塊添加一個(gè)物品,具體的細(xì)節(jié)是被由被委托人來負(fù)責(zé)的。將過多的細(xì)節(jié)交給其他模塊處理,會(huì)導(dǎo)致復(fù)雜度增加,容易出現(xiàn)問題,對(duì)其他人來說,也是一個(gè)精力浪費(fèi),如果是一個(gè)復(fù)雜
            模塊,你會(huì)發(fā)現(xiàn)需要了解太多的細(xì)節(jié),修改太多自己不熟悉的代碼,進(jìn)而導(dǎo)致風(fēng)險(xiǎn)。還有一種觀點(diǎn),認(rèn)為一鍋粥的開發(fā)方式有助于了解游戲的各個(gè)業(yè)務(wù)模塊,對(duì)這種觀點(diǎn),我是不以為然的,每天陷入到繁瑣的細(xì)節(jié),真的對(duì)熟悉業(yè)務(wù)有好處嗎?或許閑下來玩玩游戲更有幫助,而且,這么亂的代碼,看起來也是非常累的。分模塊開發(fā),具體的辦法,游戲編程精粹5上有篇文章寫得很好,這里不擴(kuò)展了。

            真的需要禁用STL嗎

              不止一次在和其他項(xiàng)目交流的資料里看到對(duì)方很威嚴(yán)的宣稱在項(xiàng)目里禁止使用STL。說實(shí)話,我還真沒覺得STL有什么不好。見過太多這類項(xiàng)目自己重復(fù)實(shí)現(xiàn)一個(gè)個(gè)蹩腳的排序算法、容器等等。
            大部分人一般都會(huì)根據(jù)經(jīng)驗(yàn)選擇使用自己熟悉的技術(shù),這個(gè)無(wú)可厚非,但是像這樣明著禁止使用STL,真不知道如何能理直氣壯。其實(shí)大部分不用STL的理由,基本上都是不熟悉,完全沒有足夠的理由禁止使用。

            游戲開發(fā)無(wú)技術(shù)含量?
             
                曾經(jīng)多次聽到行業(yè)內(nèi)的兄弟有此感慨,確實(shí),游戲邏輯復(fù)雜度非常高,架構(gòu)上大部分都是類似的。但是這并不說明游戲后臺(tái)開發(fā)復(fù)雜度不高,如何將游戲開發(fā)邏輯復(fù)雜剝離開來,做到穩(wěn)定高效開發(fā),其實(shí)還是有很多
            東西可以探討的,看看那些項(xiàng)目,大部分都是一鍋粥,需要什么功能就蠻干,加上去,這樣確實(shí)毫無(wú)技術(shù)含量,都是蠻干。所以,一件事情是否有技術(shù)含量,不光是看事情本身,還要看怎么干,蠻干和苦干,那是最沒有技術(shù)
            含量的方式了,程序員還是要有強(qiáng)烈的“偷懶”意識(shí)。

             

            posted on 2012-02-16 21:00 feixuwu 閱讀(748) 評(píng)論(4)  編輯 收藏 引用 所屬分類: 游戲開發(fā)

            FeedBack:
            # re: 項(xiàng)目開發(fā)中的一些思考
            2012-02-17 11:28 | 楊粼波
            1.對(duì)于STL這樣的態(tài)度的公司或團(tuán)隊(duì),不乏少數(shù)。其實(shí),不論從容器還是算法來說,STL提供的容器和算法足夠大部分情況下的使用。boost也同樣好。當(dāng)然,主要還是要能夠掌控他們,否則就如脫韁野馬。好與不好,合適就好。

            2.關(guān)于游戲開發(fā)的技術(shù)含量,還是有的。在我的定義里面,游戲開發(fā)其實(shí)還是一種應(yīng)用。所以相對(duì)于那些高深的研究來說,還是相對(duì)要技術(shù)含量低,特別是在國(guó)內(nèi)一把抄的前提下。就服務(wù)器而言,最基礎(chǔ)的是要提供穩(wěn)定的底層,而后隨著人數(shù)的承載量增長(zhǎng),對(duì)于服務(wù)器的架構(gòu)設(shè)計(jì)要求也是越來越高的。就管理而言,要保證幾十號(hào)人工作如一人,項(xiàng)目管理能力同樣重要。

            3.關(guān)于內(nèi)存管理,得就事論事,合適就好。先用最普通的內(nèi)存分配方式實(shí)現(xiàn),如果不合適了再行優(yōu)化。Premature optimization is the root of all evil.

            4.如果能夠在設(shè)計(jì)最初就劃分好模塊,那再好不過,因?yàn)檫@樣就可以把功能細(xì)分了,功能能細(xì)分了,這樣就能夠把任務(wù)更細(xì)的劃分到每一個(gè)實(shí)現(xiàn)人身上。但若一開始無(wú)法劃分,那就不要?jiǎng)澐郑@樣反倒會(huì)束手束腳,那就先實(shí)現(xiàn),完成后再重構(gòu)。其實(shí)你說的情況不是一個(gè)模塊劃分,接口的問題,而是一個(gè)高耦合的情況。“高內(nèi)聚,低耦合”這都沒做到,自然的,就更不要談什么模塊和接口了。如果你們能夠達(dá)到這點(diǎn),就不會(huì)亂到一鍋粥了。要堅(jiān)持不斷重構(gòu),其中的好處,你們?cè)降胶竺妫侥軌蝮w會(huì)到。  回復(fù)  更多評(píng)論
              
            # re: 項(xiàng)目開發(fā)中的一些思考
            2012-02-18 11:54 | feixuwu
            同意部分觀點(diǎn),歡迎大家探討。
            1、其實(shí)按照模塊劃分,針對(duì)接口開發(fā),組件式開發(fā)這類東西,在游戲項(xiàng)目中已經(jīng)很成熟了,很多項(xiàng)目都是這樣做的,不存在什么問題和難點(diǎn)。

            2、至于先實(shí)現(xiàn)再重構(gòu),個(gè)人覺得很難,游戲項(xiàng)目大部分時(shí)間緊,越到后面壓力越大,很難到后面來調(diào)動(dòng)大家積極性來重構(gòu),也很難抽出時(shí)間來重構(gòu),風(fēng)險(xiǎn)也非常大。過多的重構(gòu)還不如做之前多規(guī)劃。

            3、內(nèi)存管理的優(yōu)化,其實(shí)不需要代碼做出優(yōu)化修改,發(fā)布的時(shí)候鏈接下特定庫(kù)就行,無(wú)需人工參與和修改代碼,對(duì)開發(fā)者基本是透明的。

            4、不過不是好的東西就容易推,要打破現(xiàn)有或者歷史結(jié)構(gòu),在哪個(gè)項(xiàng)目都不是件容易的事情,大部分情況下,只能互相妥協(xié)。和生活中很多事情一樣,做事情之前,首先要取得別人的信任,否則多半是做不成的。
              回復(fù)  更多評(píng)論
              
            # re: 項(xiàng)目開發(fā)中的一些思考[未登錄]
            2012-02-19 10:27 | 楊粼波
            模塊啊,接口這些,技術(shù)肯定是成熟的。問題是你如何去實(shí)施。這些關(guān)鍵是你如何去劃分功能,如何去設(shè)計(jì)接口,難度在這里,而不是說為了用而用。這需要很好的設(shè)計(jì)能力,掌控力。如果是掌控不了的東西,不如不用。其實(shí)對(duì)于游戲這種應(yīng)用,很多時(shí)候,也不必要去做這樣的設(shè)計(jì),只要把低耦合做好了,一樣好使。

            重構(gòu)對(duì)于大部分項(xiàng)目來說,是不可能的任務(wù),如果開發(fā)者能力還可以,那倒是無(wú)所謂,如果不好,連正常跑都是個(gè)問題,那會(huì)死得很難看,就更不要說什么應(yīng)對(duì)變更的需求了。如果項(xiàng)目的核心有很好的管理和技術(shù)上的掌控,就不會(huì)有太多的問題,即便是在很緊迫的開發(fā)時(shí)間下。

            內(nèi)存管理上,你是用內(nèi)存池,還是用對(duì)象池,這需要開發(fā)者的選擇的。服務(wù)器還需要考慮到多線程情況下的應(yīng)用。有些特定情況下,加了反而會(huì)適得其反。

            合適的就是最好的。  回復(fù)  更多評(píng)論
              
            # re: 項(xiàng)目開發(fā)中的一些思考
            2012-02-19 16:29 | feixuwu
            在游戲開發(fā)領(lǐng)域,按照組件開發(fā)這種模式,在很多項(xiàng)目都實(shí)施過了,本人也參與過一些。不是理論上的泛泛而談,實(shí)施上和設(shè)計(jì)上都不存在難點(diǎn)了。

            游戲領(lǐng)域的需求變更是常事,基本上每幾天一變都可能,甚至還沒做完就在變了,這個(gè)和傳統(tǒng)項(xiàng)目完全不同,對(duì)開發(fā)者是有一定要求的。

            內(nèi)存管理這塊通用的內(nèi)存優(yōu)化方案確實(shí)是不需要開發(fā)者參與了(當(dāng)然,也固定了優(yōu)化模式,不可能是對(duì)象池),無(wú)論是多線程還是單線程,性能都會(huì)有很大的提升。  回復(fù)  更多評(píng)論
              
            <2012年2月>
            2930311234
            567891011
            12131415161718
            19202122232425
            26272829123
            45678910

            文章轉(zhuǎn)載請(qǐng)注明出處

            常用鏈接

            留言簿(11)

            隨筆分類

            隨筆檔案

            搜索

            •  

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            亚洲AV日韩精品久久久久| 国产高清美女一级a毛片久久w| 日日狠狠久久偷偷色综合0| 2019久久久高清456| 久久棈精品久久久久久噜噜| 色综合色天天久久婷婷基地| 日韩亚洲国产综合久久久| 久久精品人人做人人爽电影蜜月| 久久精品国产精品亚洲精品| 少妇久久久久久被弄到高潮| 欧洲精品久久久av无码电影| 99久久伊人精品综合观看| 免费精品久久天干天干| 日韩精品久久久久久| 亚洲国产精品无码成人片久久| 久久成人国产精品一区二区| 久久亚洲私人国产精品| 日韩久久无码免费毛片软件 | 久久亚洲AV无码西西人体| 亚洲伊人久久精品影院| 久久久91人妻无码精品蜜桃HD| 久久精品无码专区免费东京热| 久久91精品国产91| 久久99久久无码毛片一区二区| 狠狠色婷婷综合天天久久丁香 | 亚洲精品乱码久久久久久中文字幕 | 国产一久久香蕉国产线看观看| 国内精品久久久久影院亚洲| 久久av免费天堂小草播放| 久久se精品一区二区| 国产成年无码久久久久毛片| 亚洲中文字幕无码久久精品1| 久久伊人精品一区二区三区| 久久露脸国产精品| 久久久久亚洲AV无码去区首| 99久久精品国产毛片| 伊人久久免费视频| 999久久久国产精品| 久久91精品综合国产首页| 色噜噜狠狠先锋影音久久| 国产日韩久久免费影院|