下載地址 http://3dlearn.googlecode.com/files/武俠二源碼分析.pdf 請(qǐng)使用chrome下載,其他瀏覽器下載后文件名如果有亂碼,請(qǐng)重新命名為"武俠二源碼分析.pdf",本文末附有內(nèi)容目錄。
閱讀提示
本文適合熟悉C++(能熟練自如運(yùn)用C++)和游戲開發(fā)的開發(fā)者閱讀,需要有完整游戲框架概念(幀循環(huán)、游戲事件處理等),了解圖形流水線(d3d或OpenGL)框架或了解圖形學(xué)框架(軟件渲染框架)。本文最適合那些針對(duì)OGRE和武俠系列正在研究的開發(fā)者。本文并不完整,可以看做類似閱讀筆記之類的文檔,如果你閱讀時(shí)碰到障礙,很可能不是你的問題而是我的問題,請(qǐng)自己對(duì)照源碼分析,也非常歡迎將分析結(jié)果共享給我。由于內(nèi)容比較長,可以展開文檔結(jié)構(gòu)圖幫助閱讀。
不建議閱讀的對(duì)象
剛學(xué)完C++的學(xué)生;被boss逼迫完成任務(wù)的同學(xué);自己工作項(xiàng)目進(jìn)度緊張的打工仔;
建議不閱讀的對(duì)象
沒有源碼的童靴;
閱讀方式
本文并非嚴(yán)格的科學(xué)文獻(xiàn),只能起到點(diǎn)撥、參考作用。本文是技術(shù)分析文章,但是各個(gè)章節(jié)并不連續(xù),并且單獨(dú)章節(jié)之間也不連續(xù),不適作為連貫閱讀的材料。本文只能結(jié)合源代碼作為參考性閱讀材料。
初衷
本文被編輯并公開的最大目的是希望某人能指出其中的不足或提出更優(yōu)的分析方法:錯(cuò)誤的分析方式,事倍功半的分析方式,錯(cuò)誤的分析結(jié)果…….希望這類開發(fā)者朋友能給我寫信或加GTALK指正或交流,我的聯(lián)系方式:augustus四四零零(a)gmail.com(請(qǐng)將四四零零換成阿拉伯?dāng)?shù)字)
分享本文另一個(gè)愿望是,拋磚引玉,開發(fā)者可以寫自己的分析文檔,力所能及的將分析結(jié)果公布出來。本文并未加密,用pdf工具即可轉(zhuǎn)為word文檔。
交流分享
有一個(gè)專業(yè)的分享交流群和交流論壇
武俠交流群46060118
交流論壇 ogre3d.net/bbs
注:交流論壇一直沒有合適的人維護(hù),不久可能關(guān)閉。
其中交流群實(shí)現(xiàn)嚴(yán)格化管理,也就是實(shí)現(xiàn)過去的半年一直在實(shí)行的定位原則:
1. 開源、開放、分享
2. 不提google前5頁有的技術(shù)問題
3. 公平,尊重、友愛
4. 熱愛3D開發(fā)
5.遵從不作惡原則
請(qǐng)各位將打算將本群當(dāng)做灌水群或工作求助工具的朋友不要加入,也算對(duì)我們的一些些尊重。
一個(gè)可參考的展示
無意于在此摻雜版權(quán)之類的非技術(shù)討論,也請(qǐng)?jiān)敢饨涣鞯呐笥炎袷夭蛔鲪涸瓌t,自己適當(dāng)?shù)嗔坎蛔鲪汉筒坏靡阎g的平衡。這里還是放出一個(gè)正在運(yùn)行的展示,這是一個(gè)完整的MMORPG的其中一個(gè)場景,展示了游戲從服務(wù)器到客戶端的運(yùn)行。幸運(yùn)的截止今天持續(xù)運(yùn)行了40多天服務(wù)器仍在正常運(yùn)行,但是不能保證服務(wù)器會(huì)一直開放。這里是游戲下載和運(yùn)行說明地址:
http://ogre3d.net/bbs/viewtopic.php?f=10&t=71
注:服務(wù)器與交流論壇是同一臺(tái)服務(wù)器,同樣的不久后可能關(guān)閉。
也可以直接參考最后一節(jié)的附錄部分: miniClient11安裝方法.
內(nèi)容目錄武俠二源碼分析 2
有分享交流才有進(jìn)步,永遠(yuǎn)不要固步自封 2
目 錄 3
1 全局對(duì)象與模塊 8
1.1 Game 8
1.2 核心數(shù)據(jù)對(duì)象 8
1.3 CEngineInterface 9
1.4 Client模塊表 10
1.5 UI_CEGUI全局對(duì)象 11
1.6 Tick() 11
2 代碼風(fēng)格 13
3 變量系統(tǒng) 13
3.1 變量的加載 13
3.2 變量列表 13
3.2.1 GameServer_ConnectDirect 15
3.2.2 Game_EnterDirect 15
4 狀態(tài)機(jī) 16
4.1 登錄流程 18
4.1.1 輸入賬號(hào) 19
4.1.2 選擇服務(wù)器(非GameServer,Game_EnterDirect=FALSE) 21
4.1.3 服務(wù)器列表數(shù)據(jù)庫 23
4.2 選擇角色 23
4.3 創(chuàng)建角色 24
5 FAIRSYSTEM 26
5.1 創(chuàng)建角色 26
6 事件系統(tǒng) 27
6.1 Class view 27
6.2 事件定義 29
6.2.1 事件ID 29
6.2.2 事件名 29
6.2.3 Event結(jié)構(gòu) 29
6.2.4 事件初始化 30
6.3 注冊(cè)事件 30
6.3.1 事件注冊(cè)代碼 30
6.3.2 扯淡 32
6.3.3 事件隊(duì)列 33
6.3.4 執(zhí)行事件處理 33
6.4 事件源 33
6.5 事件輸入輸出 34
6.6 事件回溯 34
6.7 打開人物屬性欄 34
6.8 雜貨商人交互分析 35
7 INTERFACE 37
7.1 ClassView 37
8 腳本 41
8.1 Class view 41
8.2 腳本表 41
8.3 腳本使用邏輯通道 42
8.3.1 腳本加載 42
8.3.2 C++注冊(cè) 42
8.4 腳本環(huán)境 43
8.4.1 創(chuàng)建腳本運(yùn)行環(huán)境 43
8.4.2 環(huán)境類CscriptEnvironment 44
8.4.3 腳本系統(tǒng)CscriptSystem保存了所有環(huán)境對(duì)象 44
8.4.4 激活腳本環(huán)境 44
9 UISYSTEM 45
9.1 Class view 46
9.2 初始化 46
9.3 Tick 47
9.4 處理文字輸入 47
9.5 處理Size事件 48
9.6 窗口加載與預(yù)加載 48
9.6.1 預(yù)加載 48
9.6.2 加載 49
9.7 注冊(cè)窗口事件 49
9.8 窗口控件 51
9.8.1 控件Window的主要屬性與方法 51
9.8.2 類型與類對(duì)應(yīng)關(guān)系 52
9.8.3 綁定窗口類到腳本對(duì)象 53
9.9 窗口事件的處理 53
9.9.1 窗口事件處理的邏輯通道 57
10 CEGUI 57
10.1 Cegui初始化 58
10.2 模塊的加載 59
10.3 模塊定義 59
10.4 發(fā)現(xiàn)新模塊(WindowSet) 59
10.5 模塊的誕生 60
10.6 模塊的滅亡 60
10.7 Case1 60
10.8 窗口布局 61
11 WIN32窗口框架 61
11.1 主窗口的創(chuàng)建 61
11.2 選擇登錄服務(wù)器對(duì)話框 62
12 UIEDITOR 63
12.1 Globle 63
12.2 CEGUIFalagard 64
12.3 初始化過程 65
13 數(shù)據(jù)庫 65
13.1 數(shù)據(jù)庫編輯工具 66
13.2 CDataPool 66
13.2.1 聚合對(duì)象 66
13.2.2 CDataBaseSystem關(guān)鍵邏輯通道 69
13.3 DataPool命令 70
13.4 使用 70
14 輸入系統(tǒng) 70
14.1 Keyboard 70
14.2 Mouse 70
15 光標(biāo)控制 71
15.1 Class 71
15.2 光標(biāo)類型 71
15.3 光標(biāo)命令 72
15.4 實(shí)例分析 72
16 PLAYER 73
16.1 UML 73
16.2 角色數(shù)據(jù)屬性 74
16.3 角色與其他系統(tǒng)關(guān)聯(lián) 76
16.4 CObject_PlayerMySelf 77
16.5 角色創(chuàng)建GamePro_CharCreate 80
16.6 鼠標(biāo)點(diǎn)擊移動(dòng) 83
16.7 NPC對(duì)話 85
16.8 Player幀Tick 86
16.9 換裝系統(tǒng) 88
16.10 頭頂信息板 88
17 OBJECT 89
17.1 UML 89
17.2 對(duì)象定義 90
17.2.1 CObject繼承關(guān)系 92
17.2.2 CobjectCommand命令 94
17.2.3 CObjectManager 97
17.2.4 Object對(duì)象創(chuàng)建 97
17.2.5 CObject_Character關(guān)系圖 103
17.2.6 CFakeObjSystem 103
17.2.7 CAI 104
17.2.8 CObject_Item 105
17.3 創(chuàng)建渲染entity 106
17.4 圖形對(duì)象到邏輯對(duì)象 106
18 ENTITY 107
18.1 UML 108
18.2 創(chuàng)建Entity對(duì)象 109
19 網(wǎng)絡(luò)模塊 109
19.1 Class view 109
19.2 網(wǎng)絡(luò)線程 111
20 網(wǎng)絡(luò)協(xié)議 112
20.1 請(qǐng)求 112
20.2 響應(yīng) 115
21 VARIABLE SYSTEM 117
22 WORLD 118
23 NODE鏈表結(jié)構(gòu)等語言特性 119
23.1 基本結(jié)構(gòu) 119
23.2 類圖 120
23.3 tClass與tNode的交互作用 122
24 場景 122
24.1 類圖 123
24.2 場景文件表 123
24.3 場景信息 123
24.4 場景加載 123
24.5 資料 125
24.6 Dijkstra算法 125
24.6.1 Suzhou.dijkstra 125
24.7 Collision 125
24.8 Terrain 126
24.9 Area 127
24.10 patrolpoint 128
24.11 Nav 128
24.12 Region 128
24.12.1 Region文件格式 129
24.12.2 生成Region文件 130
24.12.3 加載不可行走區(qū)域 130
24.13 CRegion 132
24.14 HeightMap 133
24.15 GridInfo 134
24.16 Light Map 136
24.17 進(jìn)入場景 136
25 地形 138
25.1 Class view 138
25.2 TerrainData 143
25.3 坐標(biāo)系轉(zhuǎn)換 145
26 尋路 150
26.1 Case 楊柳村 151
27 音效 151
27.1 音效分類 152
27.2 Case 技能音效 152
28 調(diào)試 153
28.1 消息顏色 153
28.2 NPC隨機(jī)消息 154
28.3 調(diào)試技巧 154
28.4 調(diào)試面板 155
28.4.1 打開關(guān)閉調(diào)試面板 157
28.4.2 Cobject調(diào)試信息 158
28.4.3 Debug plugin 158
28.4.4 Particle fake object 159
28.4.5 產(chǎn)生debug event 159
28.4.6 顯示Grid 159
28.4.7 顯示boundbox 159
28.4.8 EngineInterface調(diào)試信息 159
28.4.9 Lua調(diào)試信息接口 160
28.4.10 DUMP字體紋理 160
29 CASE 160
29.1 ALT_C 160
29.2 傷害顯示 164
29.3 武俠-右鍵下拉菜單實(shí)現(xiàn) 164
29.4 cegui 實(shí)現(xiàn)表情 165
29.5 客戶端包 165
29.6 右鍵菜單相關(guān) 165
29.7 Character注冊(cè)分析 166
30 命名規(guī)則 168
30.1 腳本ID編號(hào)規(guī)則 168
30.2 Monstor命名規(guī)則 169
30.3 任務(wù)腳本 169
30.4 任務(wù)開發(fā)表單-001 169
31 FAQ小技巧與疑問 170
31.1 1.窗口、lua、cegui窗口等之間的傳遞關(guān)系 170
32 附錄 171
32.1 PushEvent引用表 171
32.2 miniClient11安裝方法 179