下载地址 http://3dlearn.googlecode.com/files/武侠二源码分析.pdf 请使用chrome下载,其他浏览器下载后文件名如果有乱码,请重新命名为"武侠二源码分析.pdf",本文末附有内容目录。
阅读提示
本文适合熟悉C++(能熟练自如运用C++)和游戏开发的开发者阅读,需要有完整游戏框架概念(帧循环、游戏事件处理等),了解图形流水线(d3d或OpenGL)框架或了解图形学框架(软件渲染框架)。本文最适合那些针对OGRE和武侠系列正在研究的开发者。本文并不完整,可以看做类似阅读笔记之类的文档,如果你阅读时碰到障碍,很可能不是你的问题而是我的问题,请自己对照源码分析,也非常欢迎将分析结果共享给我。由于内容比较长,可以展开文档结构图帮助阅读。
不建议阅读的对象
刚学完C++的学生;被boss逼迫完成任务的同学;自己工作项目进度紧张的打工仔;
建议不阅读的对象
没有源码的童靴;
阅读方式
本文并非严格的科学文献,只能起到点拨、参考作用。本文是技术分析文章,但是各个章节并不连续,并且单独章节之间也不连续,不适作为连贯阅读的材料。本文只能结合源代码作为参考性阅读材料。
初衷
本文被编辑并公开的最大目的是希望某人能指出其中的不足或提出更优的分析方法:错误的分析方式,事倍功半的分析方式,错误的分析结果…….希望这类开发者朋友能给我写信或加GTALK指正或交流,我的联系方式:augustus四四零零(a)gmail.com(请将四四零零换成阿拉伯数字)
分享本文另一个愿望是,抛砖引玉,开发者可以写自己的分析文档,力所能及的将分析结果公布出来。本文并未加密,用pdf工具即可转为word文档。
交流分享
有一个专业的分享交流群和交流论坛
武侠交流群46060118
交流论坛 ogre3d.net/bbs
注:交流论坛一直没有合适的人维护,不久可能关闭。
其中交流群实现严格化管理,也就是实现过去的半年一直在实行的定位原则:
1. 开源、开放、分享
2. 不提google前5页有的技术问题
3. 公平,尊重、友爱
4. 热爱3D开发
5.遵从不作恶原则
请各位将打算将本群当做灌水群或工作求助工具的朋友不要加入,也算对我们的一些些尊重。
一个可参考的展示
无意于在此掺杂版权之类的非技术讨论,也请愿意交流的朋友遵守不作恶原则,自己适当掂量不作恶和不得已之间的平衡。这里还是放出一个正在运行的展示,这是一个完整的MMORPG的其中一个场景,展示了游戏从服务器到客户端的运行。幸运的截止今天持续运行了40多天服务器仍在正常运行,但是不能保证服务器会一直开放。这里是游戏下载和运行说明地址:
http://ogre3d.net/bbs/viewtopic.php?f=10&t=71
注:服务器与交流论坛是同一台服务器,同样的不久后可能关闭。
也可以直接参考最后一节的附录部分: miniClient11安装方法.
内容目录武侠二源码分析 2
有分享交流才有进步,永远不要固步自封 2
目 录 3
1 全局对象与模块 8
1.1 Game 8
1.2 核心数据对象 8
1.3 CEngineInterface 9
1.4 Client模块表 10
1.5 UI_CEGUI全局对象 11
1.6 Tick() 11
2 代码风格 13
3 变量系统 13
3.1 变量的加载 13
3.2 变量列表 13
3.2.1 GameServer_ConnectDirect 15
3.2.2 Game_EnterDirect 15
4 状态机 16
4.1 登录流程 18
4.1.1 输入账号 19
4.1.2 选择服务器(非GameServer,Game_EnterDirect=FALSE) 21
4.1.3 服务器列表数据库 23
4.2 选择角色 23
4.3 创建角色 24
5 FAIRSYSTEM 26
5.1 创建角色 26
6 事件系统 27
6.1 Class view 27
6.2 事件定义 29
6.2.1 事件ID 29
6.2.2 事件名 29
6.2.3 Event结构 29
6.2.4 事件初始化 30
6.3 注册事件 30
6.3.1 事件注册代码 30
6.3.2 扯淡 32
6.3.3 事件队列 33
6.3.4 执行事件处理 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++注册 42
8.4 脚本环境 43
8.4.1 创建脚本运行环境 43
8.4.2 环境类CscriptEnvironment 44
8.4.3 脚本系统CscriptSystem保存了所有环境对象 44
8.4.4 激活脚本环境 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 窗口加载与预加载 48
9.6.1 预加载 48
9.6.2 加载 49
9.7 注册窗口事件 49
9.8 窗口控件 51
9.8.1 控件Window的主要属性与方法 51
9.8.2 类型与类对应关系 52
9.8.3 绑定窗口类到脚本对象 53
9.9 窗口事件的处理 53
9.9.1 窗口事件处理的逻辑通道 57
10 CEGUI 57
10.1 Cegui初始化 58
10.2 模块的加载 59
10.3 模块定义 59
10.4 发现新模块(WindowSet) 59
10.5 模块的诞生 60
10.6 模块的灭亡 60
10.7 Case1 60
10.8 窗口布局 61
11 WIN32窗口框架 61
11.1 主窗口的创建 61
11.2 选择登录服务器对话框 62
12 UIEDITOR 63
12.1 Globle 63
12.2 CEGUIFalagard 64
12.3 初始化过程 65
13 数据库 65
13.1 数据库编辑工具 66
13.2 CDataPool 66
13.2.1 聚合对象 66
13.2.2 CDataBaseSystem关键逻辑通道 69
13.3 DataPool命令 70
13.4 使用 70
14 输入系统 70
14.1 Keyboard 70
14.2 Mouse 70
15 光标控制 71
15.1 Class 71
15.2 光标类型 71
15.3 光标命令 72
15.4 实例分析 72
16 PLAYER 73
16.1 UML 73
16.2 角色数据属性 74
16.3 角色与其他系统关联 76
16.4 CObject_PlayerMySelf 77
16.5 角色创建GamePro_CharCreate 80
16.6 鼠标点击移动 83
16.7 NPC对话 85
16.8 Player帧Tick 86
16.9 换装系统 88
16.10 头顶信息板 88
17 OBJECT 89
17.1 UML 89
17.2 对象定义 90
17.2.1 CObject继承关系 92
17.2.2 CobjectCommand命令 94
17.2.3 CObjectManager 97
17.2.4 Object对象创建 97
17.2.5 CObject_Character关系图 103
17.2.6 CFakeObjSystem 103
17.2.7 CAI 104
17.2.8 CObject_Item 105
17.3 创建渲染entity 106
17.4 图形对象到逻辑对象 106
18 ENTITY 107
18.1 UML 108
18.2 创建Entity对象 109
19 网络模块 109
19.1 Class view 109
19.2 网络线程 111
20 网络协议 112
20.1 请求 112
20.2 响应 115
21 VARIABLE SYSTEM 117
22 WORLD 118
23 NODE链表结构等语言特性 119
23.1 基本结构 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 加载不可行走区域 130
24.13 CRegion 132
24.14 HeightMap 133
24.15 GridInfo 134
24.16 Light Map 136
24.17 进入场景 136
25 地形 138
25.1 Class view 138
25.2 TerrainData 143
25.3 坐标系转换 145
26 寻路 150
26.1 Case 杨柳村 151
27 音效 151
27.1 音效分类 152
27.2 Case 技能音效 152
28 调试 153
28.1 消息颜色 153
28.2 NPC随机消息 154
28.3 调试技巧 154
28.4 调试面板 155
28.4.1 打开关闭调试面板 157
28.4.2 Cobject调试信息 158
28.4.3 Debug plugin 158
28.4.4 Particle fake object 159
28.4.5 产生debug event 159
28.4.6 显示Grid 159
28.4.7 显示boundbox 159
28.4.8 EngineInterface调试信息 159
28.4.9 Lua调试信息接口 160
28.4.10 DUMP字体纹理 160
29 CASE 160
29.1 ALT_C 160
29.2 伤害显示 164
29.3 武侠-右键下拉菜单实现 164
29.4 cegui 实现表情 165
29.5 客户端包 165
29.6 右键菜单相关 165
29.7 Character注册分析 166
30 命名规则 168
30.1 脚本ID编号规则 168
30.2 Monstor命名规则 169
30.3 任务脚本 169
30.4 任务开发表单-001 169
31 FAQ小技巧与疑问 170
31.1 1.窗口、lua、cegui窗口等之间的传递关系 170
32 附录 171
32.1 PushEvent引用表 171
32.2 miniClient11安装方法 179