• <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>

            concentrate on c/c++ related technology

            plan,refactor,daily-build, self-discipline,

              C++博客 :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
              37 Posts :: 1 Stories :: 12 Comments :: 0 Trackbacks

            常用鏈接

            留言簿(9)

            我參與的團(tuán)隊(duì)

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

             // 接受密聊對方名稱,將焦點(diǎn)設(shè)置到聊天輸入框中,并且將光標(biāo)設(shè)置為第一個(gè)位置
             // 參數(shù)1:密聊用戶名,參數(shù)2:頻道信息
             static bool ChangeChannelAndSetFocus(char* username,Channel channel);
            這段代碼看起來是沒有事情的,但是在接口設(shè)置上面存在不好的做法,如果是私密頻道的話,是有用username做私聊對象的,如果是非私聊頻道的話,就沒有這個(gè)私聊對象了.但是如果要調(diào)用這個(gè)接口的話,還得給個(gè)這樣的值.
            比如這樣的用法:->ChangeChannelAndSetFocus("",public_channel),
            其實(shí)如果稍微改變一下接口設(shè)置的話,就好了.
             static bool ChangeChannelAndSetFocus(Channel channelchar* username = "");
            這樣使用默認(rèn)參數(shù)就好了.
            之前的調(diào)用就可以這樣使用了.
            :->ChangeChannelAndSetFocus(public_channel),看起來舒服多了.哎感覺編程功底還有待加強(qiáng),這么簡單的問題,拿出來想想,還有這么多學(xué)問呢.

            這幾天寫了一段函數(shù)代碼,后來被一個(gè)家伙調(diào)用了,他直接在我的函數(shù)里面修改,這樣造成了原來我函數(shù)里面的邏輯出現(xiàn)錯(cuò)誤,現(xiàn)在想來,如果以后是這樣的情況,就不能允許他在我的函數(shù)里面修改我的邏輯和相關(guān)調(diào)用,但是要留出接口給它調(diào)用,至于具體的操作,要我自己允許才能添加,當(dāng)然我可以幫他看看原來他添加的代碼,但是這樣也就沒有什么意義了.這種合作性的工作尤其要講究這些,不然很麻煩的.


            突然想起來要記錄點(diǎn)什么,調(diào)試引擎的時(shí)候,可以采用這樣的方式,打開上層邏輯的工程,然后將引擎相關(guān)的代碼拖拽到上層邏輯所在的工程里面去,然后在這個(gè)代碼里面可以設(shè)置相關(guān)斷點(diǎn),以前總不知道怎么找上層邏輯與底層引擎的入口,最近終于知道了.呵呵.通過這樣的方法,就可以在上層邏輯做某些操作,然后關(guān)聯(lián)這些邏輯相關(guān)的引擎代碼.

            今天一直在被單態(tài)困擾著,事情是這樣的:大廳和戰(zhàn)斗場景里面都有兩個(gè)類似的chatroom,并且他們各自使用的協(xié)議是不一樣的.現(xiàn)在想把他合并起來做成類似singleton的東西. 之前就遇到一個(gè)問題,大廳和戰(zhàn)斗場景不能在相互之間發(fā)送信息,后來我的處理方法是將戰(zhàn)斗場景里面添加大廳里面的響應(yīng)事件,這樣的話,在大廳里面發(fā)送私聊信息到戰(zhàn)斗場景里面,就可以接受到了,但是后來發(fā)現(xiàn)在戰(zhàn)斗場景里面發(fā)送信息到大廳里面,卻接受不到,并且這個(gè)時(shí)候,在大廳和戰(zhàn)斗場景里面已經(jīng)存在很多冗余代碼了,這樣的處理讓我感覺很不爽,我在想有沒有其它辦法,后來請教了老大,老大幫忙解釋了一下,后來,在協(xié)議處理方式上面修改了一下,才可以的。chatroom在不同的時(shí)候發(fā)送不同的協(xié)議就好了,并且在接受的時(shí)候分開大廳和戰(zhàn)斗場景處理就好了,這樣還是用了接受、和發(fā)送這兩段廢代碼。對于singleton的了解還是不夠好。 

            之前遇到的問題,是聊天發(fā)送消息并不立即顯示在本地,而要先將信息轉(zhuǎn)到服務(wù)端,服務(wù)端進(jìn)行查詢,如果能夠找到這個(gè)私聊對象,那么就返回給信息,否則就顯示說該用戶不存在,在戰(zhàn)斗場景里面向大廳的某個(gè)玩家發(fā)送私聊信息以后,退出戰(zhàn)斗場景以后,發(fā)現(xiàn)大廳里面還顯示著在戰(zhàn)斗場景里面發(fā)送的聊天信息。這樣即使我按照常規(guī)思路去把網(wǎng)絡(luò)接受端的相關(guān)代碼注釋掉也不能達(dá)到消除大廳里面的聊天信息的目的,感覺很郁悶。后來查看私聊信息方面的代碼,發(fā)現(xiàn)沒有將信息有效地?cái)r截,私聊信息在本地上面還可以被顯示,沒有經(jīng)過網(wǎng)絡(luò)方面的驗(yàn)證就直接發(fā)送過來了。在私聊信息方面做一些處理并且在退出戰(zhàn)斗場景的時(shí)候做一些信息刪除處理,這樣就可以達(dá)到目的了。
            因?yàn)橥婕覍ο笪恢脭?shù)據(jù)是從服務(wù)器那邊發(fā)送過來的,玩家從服務(wù)器獲得數(shù)據(jù)需要一段時(shí)間,所以需要加入一個(gè)插值,來將現(xiàn)在的位置過渡到下一個(gè)的位置.這里可以采用多種插值方法.

            今天寫了代碼去改寫強(qiáng)制動(dòng)作的處理,結(jié)果發(fā)現(xiàn)很多處是有問題的,其中原因是沒有將原來的代碼作用看仔細(xì)造成了,感到羞愧呢,

            另外在編寫交互性比較強(qiáng)的代碼時(shí),一定要考慮自己的代碼可能帶來的影響。

            更新某個(gè)文件比較麻煩的話,那么可以先采用原始文件刪除,并且重新全部更新的做法去做,而不是用更新某個(gè)字段的方法去做.

            如果沒有初始化聲音設(shè)備成功的話,那么應(yīng)該可以彈出提示信息框,并且將原始聲音音量設(shè)置為0.

            之前在修改一個(gè)bug(在人物控制面板打開以后,一直克隆object,造成了在引擎底層無法鎖定vertexBuffer的問題),開始以為是內(nèi)存泄露了,在打開控制面板10分鐘以后,游戲就突然出錯(cuò)了,還一度想用一些輔助工具來查找內(nèi)存的信息是否出錯(cuò),后來發(fā)現(xiàn)在人物控制面板里面克隆了過多的人物object,而這些object卻沒有及時(shí)地刪除,造成占用過多的資源,到最后連鎖住vertex buffer也不行了.在分析這個(gè)問題上面的時(shí)候,我還是一個(gè)勁地挖底層而沒有考慮太多的邏輯層面的東西,實(shí)在有點(diǎn)南轅北轍的味道.值得反省.

            在輸入的使用上面,一般的游戲都采用directInput,即使是U2,上次遇到的問題是,在一同事機(jī)器上面運(yùn)行輸入的時(shí)候就進(jìn)入不了,但是在別人的機(jī)器上面卻可以運(yùn)行好好的,后來經(jīng)常查訪發(fā)現(xiàn):1)用配置文件寫入的,之后再綁定到某個(gè)特定鍵的快捷鍵都不能用,因?yàn)檫@些是讀入內(nèi)存以后,然后用add_binding來綁定到directInput設(shè)備上面的,2) 在游戲里面使用windows message的卻可以正常使用.進(jìn)入游戲的時(shí)候,你不能輸入,而只能回車,按tab鍵以后,就可以在登陸界面輸入,如果不能按tab鍵,則不能輸入,進(jìn)入游戲以后卻可以按不是從配置文件里面讀取的信息,比如技能,人物面板,倉庫,以及地圖等.
            其中我個(gè)人建議是,盡量不要用directInput.1)首先是directInput依賴于機(jī)器,如果機(jī)器好的話,那么沒事情,如果有事情的話,那么也很難解決,2)directInput里面采用了hook,來攔截消息,這樣,還不如直接用windows message來的快?
            http://www.gamedev.net/community/forums/topic.asp?topic_id=520366
            詳細(xì)的討論見上面.

            在調(diào)試邏輯沒有發(fā)現(xiàn)什么錯(cuò)誤提示的時(shí)候,試著去調(diào)試引擎,可能問題發(fā)生得更加深,不在邏輯層面上,而在引擎內(nèi)部,這樣就要直接調(diào)試引擎了.

            在涉及到渲染方面的bug,盡量借用d3ddebugging來輔助查錯(cuò).這樣可以方便解決問題.

            連接錯(cuò)誤:IID_IDirectSound3DBuffer,其實(shí)加上dxguid.lib就好了。
            紋理尋址模式包括:
            wrap, border color, clamp,和mirror以及mirror once.
             pDrawPrimInternal->SetTexture(hTex);
            之前遇到的一個(gè)問題是,顯示玩家在小地圖上面到地圖邊界了,還能重復(fù)繪制地圖,給人的感覺好像是走不到邊界,走地圖好像是在卷軸里面一樣。
            后來才知道一般默認(rèn)的紋理尋址模式是wrap方式。
             get_device()->SetSamplerState(0,D3DSAMP_BORDERCOLOR,0x00ffffff);
             get_device()->SetSamplerState(0, D3DSAMP_ADDRESSU, D3DTADDRESS_BORDER);
             get_device()->SetSamplerState(0, D3DSAMP_ADDRESSV, D3DTADDRESS_BORDER);

            解決bug有時(shí)候不如重寫
            盡量讓策劃去管理邏輯,邏輯程序員盡量將重心放在具體技術(shù)問題上面,不懂的地方應(yīng)該主動(dòng)跟策劃溝通,而不是自己想。
            代碼可以先模擬出來,然后再放到具體的環(huán)境里面測試,獨(dú)立寫個(gè)demo之后再去測試,這樣往往會(huì)比較快捷和省事情。
            學(xué)會(huì)模擬機(jī)器執(zhí)行代碼的次序,并且提高閱讀代碼的問題,之前的時(shí)候,我使勁去調(diào)試,每次調(diào)試只為了解決一個(gè)問題,但是事實(shí)上,如果從閱讀代碼開始的話,那么我可以省掉1天的時(shí)間。
            學(xué)會(huì)調(diào)節(jié)編寫代碼時(shí)候的心情和心態(tài),這樣有助于進(jìn)行高效編程,當(dāng)心情不好的時(shí)候,一定要集中全部的注意力,并且將思路和流程作出圖記載在紙上面,這樣可以強(qiáng)迫自己全神貫注。

            今天遇到的文件打開問題是文件名路徑有空格造成的,值得指出的是對于文件打開報(bào)錯(cuò),一般很難獲得返回值信息,但是可以通過GetLastError或者@Err,以及hr等來獲得一些錯(cuò)誤返回值信息。

            對字符串操作,盡量要檢查是否有空格,如果字符串長度前面有空格的話,那么將被認(rèn)為所提供的字符串是空的。要避免這種情況的發(fā)生。對于字符串匹配要注意部分匹配的情況,比如"Tex", "Text",這里如果只匹配前面三個(gè)字符的話,那么兩者是相等的,之前就遇到一個(gè)這樣的問題,就是texture的信息被text信息所覆蓋了,導(dǎo)致控件找不到正確的texture而不能顯示出來。 

            今天遇到的問題是這樣的,之前遇到的狀態(tài)切換問題,是與狀態(tài)切換無關(guān),而與插值有關(guān),在切換狀態(tài)以后,收到一個(gè)插值位置,這樣又給角色一個(gè)新的位置,給別人看的效果就是角色先落地了,之后又上升了,像坐電梯一樣。不過從這里說明了一個(gè)問題:我在思考問題的時(shí)候,有欠周全的因素。

            今天跟蹤一個(gè)bug,在戰(zhàn)斗的時(shí)候,出現(xiàn)卡死的情況,后來發(fā)現(xiàn)狀態(tài)切換出現(xiàn)了問題,后來一直去查看戰(zhàn)斗方面的狀態(tài),但是還沒有發(fā)現(xiàn)什么結(jié)果,現(xiàn)在在想在戰(zhàn)斗中的標(biāo)志或者狀態(tài)的時(shí)候應(yīng)該設(shè)立一些標(biāo)志集合,這樣便于在某個(gè)時(shí)候檢查一些狀態(tài)的信息?,F(xiàn)在很多的標(biāo)志在游戲里面,局部的,全局的,標(biāo)志在角色上面的,標(biāo)志在物體上面的,這些都需要好好地管理。

            全方面,多角度地思考問題,而不能將思維局限在某處.學(xué)會(huì)從大局或者小處去分析問題,大處不行的話,就小處,將相關(guān)的信息串起來.所有的信息應(yīng)該是個(gè)串型或者鏈型的.之前在處理問題的時(shí)候,把思路限制在太小的范圍內(nèi)了.以至于花了很多時(shí)間才找到問題所在.

            根據(jù)正常情況和非正常情況來獲得數(shù)據(jù)比較,以確定正確的流程和結(jié)構(gòu)。如果遇到錯(cuò)誤的亂值,那么就看看正常的數(shù)值,然后根據(jù)這個(gè)比較來獲得一些提示信息。

            今天犯了錯(cuò)誤,自己有最新版本,但是沒有上傳,結(jié)果vss上面的版本把自己的最新版本給覆蓋了。

            在發(fā)送消息的時(shí)候,有時(shí)候?yàn)榱朔乐诡l繁發(fā)送消息,要加入一個(gè)cd時(shí)間,防止因?yàn)榫W(wǎng)絡(luò)問題,服務(wù)端收到玩家連續(xù)的信息。

            物理系統(tǒng), v = v0 - gt. 玩家上跳的速度表示,而在下降,則是v = gt,按照自由落體運(yùn)動(dòng)來進(jìn)行.并且速度是個(gè)向量,這樣如果在X,Z軸上面有初速度的話,那么就可能出現(xiàn)拋物線的情況.



            posted on 2009-01-31 08:23 jolley 閱讀(471) 評論(2)  編輯 收藏 引用

            Feedback

            # re: 編程雜燴 2009-02-01 08:12 LOGOS
            好經(jīng)驗(yàn)收藏  回復(fù)  更多評論
              

            # re: 編程雜燴 2010-03-05 16:10 mybios
            善于總結(jié),是一個(gè)好程序員  回復(fù)  更多評論
              

            99久久国语露脸精品国产| 久久久综合九色合综国产| 亚洲精品国产第一综合99久久| 欧美一级久久久久久久大片| 中文字幕无码久久精品青草| 久久精品国产亚洲AV嫖农村妇女| 国产V亚洲V天堂无码久久久| 久久综合九色综合久99| 亚洲AV日韩精品久久久久| 国产福利电影一区二区三区久久久久成人精品综合 | 国产精品视频久久| 久久精品国产WWW456C0M| 人妻无码中文久久久久专区| 久久久久亚洲精品无码网址 | 久久99国产精品成人欧美| 伊人久久精品无码二区麻豆| 久久综合狠狠综合久久激情 | 久久精品国产99久久久古代 | 久久夜色精品国产噜噜噜亚洲AV| 国产激情久久久久影院老熟女免费| 欧美日韩精品久久久久| 久久久久无码精品| 日本免费久久久久久久网站| 久久久久成人精品无码中文字幕| 久久成人永久免费播放| 久久99精品国产99久久| 久久综合给合久久狠狠狠97色 | 国产日产久久高清欧美一区| 狠狠色婷婷久久综合频道日韩 | 97超级碰碰碰碰久久久久| 久久精品国产亚洲精品2020| 亚洲欧美成人综合久久久| 亚洲精品99久久久久中文字幕| 久久精品免费网站网| 国产精品久久久久一区二区三区 | 7777久久久国产精品消防器材| 久久中文字幕精品| 伊人久久精品无码av一区| 狠狠色综合网站久久久久久久高清 | 免费精品久久天干天干| 久久国产一片免费观看|