书籍详情
游戏编程全接触
作者:(美)Mike McShaffry著;冯兆麟,孔祥一,李华杰译;冯兆麟译
出版社:人民邮电出版社
出版时间:2006-01-01
ISBN:9787115132192
定价:¥48.00
购买这本书可以去
内容简介
本书的作者以其对游戏行业的独到见解,讲述了游戏开发的方方面面。从游戏是怎样一个行业到游戏业中形形色色的人;从细琐的技巧和算法,到游戏的结构和架构:从调试技巧到进度里程碑的创建和项目进度的管理。本书共15章,分成四大部分:第一部分“游戏编程基础”,介绍了游戏的主要组成部分及其如何相互作用,并展示了一些游戏编程工具箱中的必备工具;第二部分“让游戏跑起来”,向读者展示第一个充满内容的游戏代码示例,包括用户界面代码、2D图形代码和主循环:第三部分“构建你的游戏”,进一步讲述更复杂的代码,如3D代码、Windows游戏的特殊代码和一些优秀的debug工具;第四部分“专业游戏制作”,展示了实际的开发游戏过程,从进度安排到测试,到最终的游戏交付。.无论对于游戏项目经理,游戏程序员,还是一名对游戏充满好奇心的狂热爱好者,本书都将让读者受益匪浅。...
作者简介
Mike McShaffry在刚会敲键盘时就开始了游戏编程。高中毕业不久他就进入了电脑游戏业的训练营——0rigin Systems公司。他参与开发了Martian Dreams、《创世纪VII:黑门》、《创世纪VIII:异教徒》、《创世纪Ix:阿森松》和《网络创世纪》。在那里工作了7年后,Mike辞职了,并于1997年创建了他的第一个公司——车库里出来的Tornado Alley。它的目标是为孩子制作一款“成年人禁止入内”的超多用户世界。随后他在Glass Eye Entertainment公司就职,为Monty Kerr工作。他在那里开发了Microsoft Casino。短短10个月之后,Monty要求Mike和他新组建的团队开创自己的公司,称为Compulsive Development,它专门和微软合作开发棋牌类游戏项目。Mike目前是Glass Eye Entertainment公司软件开发的领导。
目录
第一部分 游戏编程基础
第1章 游戏编程很奇怪,因为…… 3
1.1 好的方面 3
1.1.1 工作 4
1.1.2 人 4
1.1.3 工具——软件开发包(SDK) 5
1.1.4 硬件 5
1.1.5 平台 6
1.1.6 会展 7
1.2 坏的地方 8
1.2.1 游戏编程难得离谱 8
1.2.2 其他零碎 9
1.2.3 那不是个bug——那是个特性 9
1.2.4 工具 10
1.3 恶心之处 10
1.3.1 命中移动目标 11
1.3.2 冲刺模式(和冲刺大餐) 11
1.3.3 哼,骗子 12
1.3.4 操作系统地狱 12
1.3.5 雇员流动的天然特质 13
1.4 这一切都值得,对吗? 13
第2章 游戏中有什么 15
2.1 显示技术:快速概述 15
2.1.1 分辨率和位深 15
2.1.2 核心显示技术:2D或者3D 17
2.2 混合2D和3D技术 23
2.2.1 Grim Fandango 23
2.2.2 视频驱动程序和性能问题 24
2.3 我必须用DirectX吗 25
2.3.1 DirectX的设计逻辑体系 25
2.3.2 Direct3D或者OpenGL 26
2.3.3 DirectSound或者RAD游戏工具的Miles Sound 26
2.3.4 DirectInput或者自己实现 27
2.3.5 DirectPlay、TCP或者UDP 27
2.3.6 DirectShow或Bink 27
2.3.7 DirectMusic或自己实现 28
2.4 用户界面编码 28
2.5 资源缓冲 28
2.6 主循环 29
2.7 其他 30
第3章 所有游戏程序员都应该了解的“简单东西” 31
3.1 不可或缺的设计实践 31
3.1.1 避免隐藏代码和非简单操作 32
3.1.2 类结构:保持简单 32
3.1.3 继承和包含 33
3.1.4 变坏的虚函数 33
3.1.5 使用接口类 34
3.1.6 考虑使用工厂 34
3.1.7 从游戏逻辑中分离用户界面 35
3.1.8 实现流构造函数 35
3.2 智能指针和裸指针 36
3.2.1 引用计数 36
3.2.2 智能指针 37
3.3 正确使用内存 41
3.3.1 了解不同种类的内存 41
3.3.2 优化内存访问 44
3.3.3 内存对齐 45
3.3.4 虚拟内存 46
3.3.5 使用内存映射文件 46
3.3.6 编写自己的内存管理器 48
3.4 游戏脚本语言 49
3.4.1 使用脚本来处理文本 50
3.4.2 事件脚本 51
3.4.3 解释与编译 51
3.4.4 用Lex和Yacc开发自己的语言 52
3.4.5 Python和Lua 56
3.5 Mike一背包的好东西 57
3.5.1 一个很棒的随机数发生器 57
3.5.2 用Optional支持可选变量 59
3.5.3 集合的伪随机遍历 64
3.6 这并不是那么简单 67
第二部分 让游戏跑起来
第4章 build游戏 71
4.1 一点动机 71
4.2 创建项目 72
4.2.1 创建坚不可摧的目录结构 72
4.2.2 游戏引擎放在哪里? 75
4.2.3 Visual Studio build选项配置 75
4.2.4 build配置 76
4.3 源代码仓库和版本控制 76
4.3.1 NXN的AlienBrain 77
4.3.2 微软的Visual SourceSafe 78
4.3.3 免费的东西:CVS、RCS、…… 78
4.3.4 Perforce软件的Perforce 79
4.3.5 非常昂贵的工具:StarTeam和ClearCase 79
4.3.6 使用源代码控制分支 79
4.4 build游戏:一门黑色艺术? 81
4.4.1 自动化build 82
4.4.2 build机器 82
4.4.3 自动build脚本 82
4.5 创建build脚本 83
4.5.1 标准build 83
4.5.2 里程碑build 84
4.6 多个项目和共享代码 85
4.7 最后的建议 86
第5章 用户界面编程和输入设备 87
5.1 获取设备状态 87
5.2 使用鼠标(和游戏杆) 90
5.2.1 捕获鼠标 91
5.2.2 使用鼠标拖放 92
5.3 使用键盘 94
5.3.1 Mike的键盘窥探器 94
5.3.2 GetAsyncKeyState()和其他函数 97
5.3.3 在Windows下处理Alt键 98
5.4 用户界面组件 98
5.4.1 屏幕 98
5.4.2 对话框:模态与非模态 101
5.4.3 控件 103
5.4.4 控件判别 105
5.4.5 命中测试和焦点顺序 106
5.4.6 控件状态 107
5.5 更多控件属性 107
5.5.1 热键 108
5.5.2 工具提示 108
5.5.3 上下文敏感帮助 108
5.5.4 拖动 108
5.5.5 声音和动画 109
5.6 最后的用户界面提示 109
第6章 每一个游戏开发者都应该掌握的2D知识 111
6.1 2D绘制和DirectX 112
6.1.1 像素和视频硬件 112
6.1.2 视频硬件和缓存 113
6.1.3 视频表面和内存表面 115
6.2 基本2D绘制概念 116
6.2.1 Windows位图和其他GDI的小玩意 117
6.2.2 颜色键和色度键 118
6.2.3 复制表面 120
6.2.4 使用Alpha通道复制表面 121
6.3 绘制文本 127
6.4 使用精灵(sprite) 130
6.4.1 一个基本的精灵类 130
6.4.2 排序顺序和位置 131
6.4.3 绘制和动画 132
6.4.4 初始化精灵 135
6.4.5 Restore() 136
6.4.6 脏矩形绘制 136
6.5 图形文件格式 137
6.6 结论 138
第7章 初始化和主循环 139
7.1 初始化101 139
7.2 C++初始化中的一些缺陷 140
7.3 初始化游戏 144
7.3.1 检查系统资源 144
7.3.2 计算CPU速度 145
7.3.3 估计VRAM 149
7.3.4 加载游戏调试选项 150
7.3.5 你拥有的是个垃圾袋吗 151
7.3.6 初始化资源缓存 151
7.3.7 使用CreateWindow来创建窗口 152
7.3.8 初始化声音系统 154
7.3.9 加载用户可设置的游戏选项 154
7.3.10 创建绘图表面 155
7.3.11 初始化游戏对象 156
7.4 主循环 156
7.4.1 渲染并呈现屏幕 159
7.4.2 更新游戏状态 161
7.4.3 一个简单的协同多任务调度器 163
7.4.4 从CProcess派生的类示例 169
7.4.5 CProcess派生类的更多使用 170
7.5 平稳着陆:干净漂亮地退出 170
7.5.1 我该如何从这里逃脱 171
7.5.2 关闭游戏 172
7.6 我现在就可以做游戏了吗 173
第8章 载入并缓冲资源 175
8.1 图形和音乐的格式 175
8.1.1 位图和纹理 176
8.1.2 哪一个更好:24位、16位还是8位的图形 176
8.1.3 使用有损压缩 177
8.1.4 声音和音乐 177
8.1.5 视频和过场电影 178
8.2 资源文件 179
8.2.1 打包资源到一个文件中 180
8.2.2 打包资源的其他一些优点 181
8.3 数据压缩 181
8.4 iPac:一个资源文件生成器 182
8.4.1 iPac概观 182
8.4.2 iPac数据文件 185
8.4.3 生成头文件 187
8.4.4 其他与管理资源有关的特性 188
8.5 资源高速缓存 188
8.6 世界设计和缓存预测 193
8.7 我的缓存不够了 196
第三部分 构建你的游戏
第9章 所有游戏程序员必须掌握的3D图形学知识 199
9.1 3D图形流水线 199
9.2 你的DirectX 9试练场 200
9.3 3D数学101 200
9.3.1 坐标和坐标系统 201
9.3.2 矢量数学 202
9.3.3 矩阵数学 206
9.3.4 四元组数学 211
9.3.5 视变换 213
9.3.6 投影变换 214
9.4 我受够数学了——请停下来 215
9.4.1 三角形 215
9.4.2 光照、法线和颜色 216
9.4.3 贴有纹理的顶点 218
9.4.4 其他顶点数据 219
9.4.5 三角形网格 219
9.4.6 索引的三角形网格 221
9.4.7 材质 223
9.4.8 纹理 224
9.4.9 二次抽样(subsampling) 225
9.4.10 mip-mapping 226
9.5 3D图形——它那么容易 226
第10章 3D引擎 229
10.1 建立项目 229
10.2 使用场景图 230
10.2.1 场景图结点 234
10.2.2 建造场景 239
10.2.3 一个实用的摄像机控制器 242
10.2.4 把SceneGraph放进DirectX游乐场 247
10.3 遗漏了什么? 249
10.4 3D中间件回顾 250
10.4.1 Renderware Graphics 251
10.4.2 Intrinsic Alchemy 251
10.4.3 NDL出品的NetImmerse 252
10.4.4 虚幻引擎 252
10.5 开发自己的3D引擎 252
10.6 物理引擎 253
10.7 还没满足? 254
第11章 开发Windows游戏需要特殊考虑的事项 255
11.1 Microsoft Foundation Class(MFC)到底怎么样 256
11.1.1 MFC——你一定疯了!!?@! 257
11.1.2 MFC——你一定要使用它 257
11.1.3 对MFC的最后裁决 258
11.2 窗口模式和全屏幕模式 259
11.2.1 丢失或者不兼容的表面 260
11.2.2 坏窗口 262
11.2.3 GDI对话框和页面翻转(Flipping) 263
11.2.4 需要处理的消息 263
11.2.5 WM_ACTIVATE 264
11.2.6 WM_SYSCOMMAND 265
11.2.7 WM_MOVE 265
11.2.8 WM_DEVICECHANGE 266
11.2.9 WM_POWERBROADCAST 267
11.2.10 WM_DISPLAYCHANGE 267
11.2.11 WM_ENTERSIZEMOVE、WM_EXITSIZEMOVE 267
11.2.12 WM_GETMINMAXINFO 267
11.3 操作系统相关的内容 268
11.3.1 API兼容性和UNICODE 268
11.3.2 游戏的注册表键 269
11.3.3 Windows 95 269
11.3.4 Windows 98和Windows ME 269
11.3.5 Windows NT 270
11.3.6 Windows 2000 270
11.3.7 Windows XP 270
11.4 “专为Windows设计(Designed for Windows)”标志认证程序 270
11.5 结论 285
第12章 调试游戏 287
12.1 处理失败的艺术 288
12.2 调试基础 289
12.2.1 使用调试器 291
12.2.2 安装Windows符号文件 292
12.2.3 调试全屏游戏 294
12.2.4 远程调试 294
12.2.5 调试微型转储(dump) 296
12.3 调试技巧 299
12.3.1 调试是一个实验 300
12.3.2 重现bug 301
12.3.3 减小复杂度 302
12.3.4 设置下一语句 302
12.3.5 汇编级别调试 303
12.3.6 给代码添加调料 305
12.3.7 提取调试信息 306
12.3.8 Lint和其他代码分析器 306
12.3.9 BoundsChecker和实时分析器 307
12.3.10 消失的bug 307
12.3.11 调整数值 307
12.3.12 caveman调试 308
12.3.13 当一切办法都失败了 308
12.4 各种各样的bug 309
12.4.1 内存泄漏和堆溢出 309
12.4.2 游戏数据损坏 312
12.4.3 栈破坏 313
12.4.4 剪切和粘贴的bug 314
12.4.5 空间不足 314
12.4.6 只有在release模式才出现的bug 315
12.4.7 惹事生非的多线程 315
12.4.8 奇怪的那些 315
12.5 结束小思 317
第四部分 专业游戏制作
第13章 进度计划的艺术 321
13.1 好进度、坏进度 321
13.2 所有进度计划的关键:里程碑 322
13.3 做计划前需要懂得的事情 330
13.3.1 使用微软Project的技巧与诀窍 330
13.3.2 电脑游戏中的关键编程任务 331
13.3.3 基于物件的进度安排 332
13.3.4 编写用户手册和cluebook 333
13.3.5 了解队伍,了解游戏类型 333
13.4 创建进度计划 333
13.4.1 收集任务仓库 334
13.4.2 关于预计时间的一些说明 335
13.4.3 分配任务和平衡进度 335
13.4.4 产品黑洞 337
13.4.5 把进度切分成里程碑 338
13.4.6 撰写项目里程碑文档 339
13.4.7 编写个人里程碑文档 339
13.4.8 在放出猎犬前还有一件你应该知道的事情 340
13.5 把事情做对 340
第14章 测试须知 343
14.1 游戏为什么有bug 343
14.1.1 理由1:开发组从没有见到bug重现 343
14.1.2 理由2:项目组决定把bug置之不理 344
14.2 测试计划 345
14.2.1 功能测试 345
14.2.2 压力测试 348
14.2.3 可玩性测试 350
14.2.4 可用性测试 350
14.2.5 配置测试 351
14.3 安排测试 352
14.4 自动化的测试 352
14.5 bug数据库 359
14.6 哪些bug得到修正 365
14.6.1 绝不要修复这些bug 367
14.6.2 bug花费高昂 367
14.7 对bug数据库的静态分析 368
14.8 测试组 370
14.9 beta公测 371
14.10 结束语 372
第15章 驶向结束 373
15.1 结束时的问题 374
15.1.1 质量 374
15.1.2 代码 375
15.1.3 内容 378
15.2 应付大麻烦 379
15.2.1 严重滞后于计划的项目 379
15.2.2 人事相关问题 382
15.2.3 竞争对手会置你于死地 384
15.2.4 没有出路,是吗? 384
15.2.5 最后说一句:不要慌张 385
15.3 光明就在前方——毕竟不是一场训练 385
15.3.1 测试存档 385
15.3.2 补丁build或者产品演示 386
15.3.3 事后分析 386
15.3.4 如何利用你的时间 387
第1章 游戏编程很奇怪,因为…… 3
1.1 好的方面 3
1.1.1 工作 4
1.1.2 人 4
1.1.3 工具——软件开发包(SDK) 5
1.1.4 硬件 5
1.1.5 平台 6
1.1.6 会展 7
1.2 坏的地方 8
1.2.1 游戏编程难得离谱 8
1.2.2 其他零碎 9
1.2.3 那不是个bug——那是个特性 9
1.2.4 工具 10
1.3 恶心之处 10
1.3.1 命中移动目标 11
1.3.2 冲刺模式(和冲刺大餐) 11
1.3.3 哼,骗子 12
1.3.4 操作系统地狱 12
1.3.5 雇员流动的天然特质 13
1.4 这一切都值得,对吗? 13
第2章 游戏中有什么 15
2.1 显示技术:快速概述 15
2.1.1 分辨率和位深 15
2.1.2 核心显示技术:2D或者3D 17
2.2 混合2D和3D技术 23
2.2.1 Grim Fandango 23
2.2.2 视频驱动程序和性能问题 24
2.3 我必须用DirectX吗 25
2.3.1 DirectX的设计逻辑体系 25
2.3.2 Direct3D或者OpenGL 26
2.3.3 DirectSound或者RAD游戏工具的Miles Sound 26
2.3.4 DirectInput或者自己实现 27
2.3.5 DirectPlay、TCP或者UDP 27
2.3.6 DirectShow或Bink 27
2.3.7 DirectMusic或自己实现 28
2.4 用户界面编码 28
2.5 资源缓冲 28
2.6 主循环 29
2.7 其他 30
第3章 所有游戏程序员都应该了解的“简单东西” 31
3.1 不可或缺的设计实践 31
3.1.1 避免隐藏代码和非简单操作 32
3.1.2 类结构:保持简单 32
3.1.3 继承和包含 33
3.1.4 变坏的虚函数 33
3.1.5 使用接口类 34
3.1.6 考虑使用工厂 34
3.1.7 从游戏逻辑中分离用户界面 35
3.1.8 实现流构造函数 35
3.2 智能指针和裸指针 36
3.2.1 引用计数 36
3.2.2 智能指针 37
3.3 正确使用内存 41
3.3.1 了解不同种类的内存 41
3.3.2 优化内存访问 44
3.3.3 内存对齐 45
3.3.4 虚拟内存 46
3.3.5 使用内存映射文件 46
3.3.6 编写自己的内存管理器 48
3.4 游戏脚本语言 49
3.4.1 使用脚本来处理文本 50
3.4.2 事件脚本 51
3.4.3 解释与编译 51
3.4.4 用Lex和Yacc开发自己的语言 52
3.4.5 Python和Lua 56
3.5 Mike一背包的好东西 57
3.5.1 一个很棒的随机数发生器 57
3.5.2 用Optional支持可选变量 59
3.5.3 集合的伪随机遍历 64
3.6 这并不是那么简单 67
第二部分 让游戏跑起来
第4章 build游戏 71
4.1 一点动机 71
4.2 创建项目 72
4.2.1 创建坚不可摧的目录结构 72
4.2.2 游戏引擎放在哪里? 75
4.2.3 Visual Studio build选项配置 75
4.2.4 build配置 76
4.3 源代码仓库和版本控制 76
4.3.1 NXN的AlienBrain 77
4.3.2 微软的Visual SourceSafe 78
4.3.3 免费的东西:CVS、RCS、…… 78
4.3.4 Perforce软件的Perforce 79
4.3.5 非常昂贵的工具:StarTeam和ClearCase 79
4.3.6 使用源代码控制分支 79
4.4 build游戏:一门黑色艺术? 81
4.4.1 自动化build 82
4.4.2 build机器 82
4.4.3 自动build脚本 82
4.5 创建build脚本 83
4.5.1 标准build 83
4.5.2 里程碑build 84
4.6 多个项目和共享代码 85
4.7 最后的建议 86
第5章 用户界面编程和输入设备 87
5.1 获取设备状态 87
5.2 使用鼠标(和游戏杆) 90
5.2.1 捕获鼠标 91
5.2.2 使用鼠标拖放 92
5.3 使用键盘 94
5.3.1 Mike的键盘窥探器 94
5.3.2 GetAsyncKeyState()和其他函数 97
5.3.3 在Windows下处理Alt键 98
5.4 用户界面组件 98
5.4.1 屏幕 98
5.4.2 对话框:模态与非模态 101
5.4.3 控件 103
5.4.4 控件判别 105
5.4.5 命中测试和焦点顺序 106
5.4.6 控件状态 107
5.5 更多控件属性 107
5.5.1 热键 108
5.5.2 工具提示 108
5.5.3 上下文敏感帮助 108
5.5.4 拖动 108
5.5.5 声音和动画 109
5.6 最后的用户界面提示 109
第6章 每一个游戏开发者都应该掌握的2D知识 111
6.1 2D绘制和DirectX 112
6.1.1 像素和视频硬件 112
6.1.2 视频硬件和缓存 113
6.1.3 视频表面和内存表面 115
6.2 基本2D绘制概念 116
6.2.1 Windows位图和其他GDI的小玩意 117
6.2.2 颜色键和色度键 118
6.2.3 复制表面 120
6.2.4 使用Alpha通道复制表面 121
6.3 绘制文本 127
6.4 使用精灵(sprite) 130
6.4.1 一个基本的精灵类 130
6.4.2 排序顺序和位置 131
6.4.3 绘制和动画 132
6.4.4 初始化精灵 135
6.4.5 Restore() 136
6.4.6 脏矩形绘制 136
6.5 图形文件格式 137
6.6 结论 138
第7章 初始化和主循环 139
7.1 初始化101 139
7.2 C++初始化中的一些缺陷 140
7.3 初始化游戏 144
7.3.1 检查系统资源 144
7.3.2 计算CPU速度 145
7.3.3 估计VRAM 149
7.3.4 加载游戏调试选项 150
7.3.5 你拥有的是个垃圾袋吗 151
7.3.6 初始化资源缓存 151
7.3.7 使用CreateWindow来创建窗口 152
7.3.8 初始化声音系统 154
7.3.9 加载用户可设置的游戏选项 154
7.3.10 创建绘图表面 155
7.3.11 初始化游戏对象 156
7.4 主循环 156
7.4.1 渲染并呈现屏幕 159
7.4.2 更新游戏状态 161
7.4.3 一个简单的协同多任务调度器 163
7.4.4 从CProcess派生的类示例 169
7.4.5 CProcess派生类的更多使用 170
7.5 平稳着陆:干净漂亮地退出 170
7.5.1 我该如何从这里逃脱 171
7.5.2 关闭游戏 172
7.6 我现在就可以做游戏了吗 173
第8章 载入并缓冲资源 175
8.1 图形和音乐的格式 175
8.1.1 位图和纹理 176
8.1.2 哪一个更好:24位、16位还是8位的图形 176
8.1.3 使用有损压缩 177
8.1.4 声音和音乐 177
8.1.5 视频和过场电影 178
8.2 资源文件 179
8.2.1 打包资源到一个文件中 180
8.2.2 打包资源的其他一些优点 181
8.3 数据压缩 181
8.4 iPac:一个资源文件生成器 182
8.4.1 iPac概观 182
8.4.2 iPac数据文件 185
8.4.3 生成头文件 187
8.4.4 其他与管理资源有关的特性 188
8.5 资源高速缓存 188
8.6 世界设计和缓存预测 193
8.7 我的缓存不够了 196
第三部分 构建你的游戏
第9章 所有游戏程序员必须掌握的3D图形学知识 199
9.1 3D图形流水线 199
9.2 你的DirectX 9试练场 200
9.3 3D数学101 200
9.3.1 坐标和坐标系统 201
9.3.2 矢量数学 202
9.3.3 矩阵数学 206
9.3.4 四元组数学 211
9.3.5 视变换 213
9.3.6 投影变换 214
9.4 我受够数学了——请停下来 215
9.4.1 三角形 215
9.4.2 光照、法线和颜色 216
9.4.3 贴有纹理的顶点 218
9.4.4 其他顶点数据 219
9.4.5 三角形网格 219
9.4.6 索引的三角形网格 221
9.4.7 材质 223
9.4.8 纹理 224
9.4.9 二次抽样(subsampling) 225
9.4.10 mip-mapping 226
9.5 3D图形——它那么容易 226
第10章 3D引擎 229
10.1 建立项目 229
10.2 使用场景图 230
10.2.1 场景图结点 234
10.2.2 建造场景 239
10.2.3 一个实用的摄像机控制器 242
10.2.4 把SceneGraph放进DirectX游乐场 247
10.3 遗漏了什么? 249
10.4 3D中间件回顾 250
10.4.1 Renderware Graphics 251
10.4.2 Intrinsic Alchemy 251
10.4.3 NDL出品的NetImmerse 252
10.4.4 虚幻引擎 252
10.5 开发自己的3D引擎 252
10.6 物理引擎 253
10.7 还没满足? 254
第11章 开发Windows游戏需要特殊考虑的事项 255
11.1 Microsoft Foundation Class(MFC)到底怎么样 256
11.1.1 MFC——你一定疯了!!?@! 257
11.1.2 MFC——你一定要使用它 257
11.1.3 对MFC的最后裁决 258
11.2 窗口模式和全屏幕模式 259
11.2.1 丢失或者不兼容的表面 260
11.2.2 坏窗口 262
11.2.3 GDI对话框和页面翻转(Flipping) 263
11.2.4 需要处理的消息 263
11.2.5 WM_ACTIVATE 264
11.2.6 WM_SYSCOMMAND 265
11.2.7 WM_MOVE 265
11.2.8 WM_DEVICECHANGE 266
11.2.9 WM_POWERBROADCAST 267
11.2.10 WM_DISPLAYCHANGE 267
11.2.11 WM_ENTERSIZEMOVE、WM_EXITSIZEMOVE 267
11.2.12 WM_GETMINMAXINFO 267
11.3 操作系统相关的内容 268
11.3.1 API兼容性和UNICODE 268
11.3.2 游戏的注册表键 269
11.3.3 Windows 95 269
11.3.4 Windows 98和Windows ME 269
11.3.5 Windows NT 270
11.3.6 Windows 2000 270
11.3.7 Windows XP 270
11.4 “专为Windows设计(Designed for Windows)”标志认证程序 270
11.5 结论 285
第12章 调试游戏 287
12.1 处理失败的艺术 288
12.2 调试基础 289
12.2.1 使用调试器 291
12.2.2 安装Windows符号文件 292
12.2.3 调试全屏游戏 294
12.2.4 远程调试 294
12.2.5 调试微型转储(dump) 296
12.3 调试技巧 299
12.3.1 调试是一个实验 300
12.3.2 重现bug 301
12.3.3 减小复杂度 302
12.3.4 设置下一语句 302
12.3.5 汇编级别调试 303
12.3.6 给代码添加调料 305
12.3.7 提取调试信息 306
12.3.8 Lint和其他代码分析器 306
12.3.9 BoundsChecker和实时分析器 307
12.3.10 消失的bug 307
12.3.11 调整数值 307
12.3.12 caveman调试 308
12.3.13 当一切办法都失败了 308
12.4 各种各样的bug 309
12.4.1 内存泄漏和堆溢出 309
12.4.2 游戏数据损坏 312
12.4.3 栈破坏 313
12.4.4 剪切和粘贴的bug 314
12.4.5 空间不足 314
12.4.6 只有在release模式才出现的bug 315
12.4.7 惹事生非的多线程 315
12.4.8 奇怪的那些 315
12.5 结束小思 317
第四部分 专业游戏制作
第13章 进度计划的艺术 321
13.1 好进度、坏进度 321
13.2 所有进度计划的关键:里程碑 322
13.3 做计划前需要懂得的事情 330
13.3.1 使用微软Project的技巧与诀窍 330
13.3.2 电脑游戏中的关键编程任务 331
13.3.3 基于物件的进度安排 332
13.3.4 编写用户手册和cluebook 333
13.3.5 了解队伍,了解游戏类型 333
13.4 创建进度计划 333
13.4.1 收集任务仓库 334
13.4.2 关于预计时间的一些说明 335
13.4.3 分配任务和平衡进度 335
13.4.4 产品黑洞 337
13.4.5 把进度切分成里程碑 338
13.4.6 撰写项目里程碑文档 339
13.4.7 编写个人里程碑文档 339
13.4.8 在放出猎犬前还有一件你应该知道的事情 340
13.5 把事情做对 340
第14章 测试须知 343
14.1 游戏为什么有bug 343
14.1.1 理由1:开发组从没有见到bug重现 343
14.1.2 理由2:项目组决定把bug置之不理 344
14.2 测试计划 345
14.2.1 功能测试 345
14.2.2 压力测试 348
14.2.3 可玩性测试 350
14.2.4 可用性测试 350
14.2.5 配置测试 351
14.3 安排测试 352
14.4 自动化的测试 352
14.5 bug数据库 359
14.6 哪些bug得到修正 365
14.6.1 绝不要修复这些bug 367
14.6.2 bug花费高昂 367
14.7 对bug数据库的静态分析 368
14.8 测试组 370
14.9 beta公测 371
14.10 结束语 372
第15章 驶向结束 373
15.1 结束时的问题 374
15.1.1 质量 374
15.1.2 代码 375
15.1.3 内容 378
15.2 应付大麻烦 379
15.2.1 严重滞后于计划的项目 379
15.2.2 人事相关问题 382
15.2.3 竞争对手会置你于死地 384
15.2.4 没有出路,是吗? 384
15.2.5 最后说一句:不要慌张 385
15.3 光明就在前方——毕竟不是一场训练 385
15.3.1 测试存档 385
15.3.2 补丁build或者产品演示 386
15.3.3 事后分析 386
15.3.4 如何利用你的时间 387
猜您喜欢