Windows游戏编程大师技巧(第2版)

978-7-115-29248-3
作者: 【美】André LaMothe
译者: 沙鹰
编辑: 陈冀康

图书目录:

目 录

第 一部分 Windows编程基础

第 1章 学海无涯 2

1.1 历史一瞥 2

1.2 设计游戏 5

1.3 游戏类型 5

1.4 集思广益 6

1.5 设计文档和情节串联图板 6

1.6 使游戏具有趣味性 7

1.7 游戏的构成 7

1.8 常规游戏编程指导规范 11

1.9 使用工具 14

1.10 从准备到完成——使用编译器 15

1.11 示例:FreakOut 17

1.12 小结 30

第 2章 Windows编程模型 31

2.1 Windows的起源 31

2.1.1 早期版本的Windows 31

2.1.2 Windows 3.x 32

2.1.3 Windows 95 32

2.1.4 Windows 98 33

2.1.5 Windows ME 33

2.1.6 Windows XP 33

2.1.7 Windows NT/2000 33

2.1.8 Windows 基本架构:Win9X/NT 34

2.2 多任务和多线程 34

2.2.1 获取线程的信息 34

2.2.2 事件模型 36

2.3 按照微软风格编程:匈牙利符号表示法 37

2.3.1 变量的命名 38

2.3.2 函数的命名 38

2.3.3 类型和常量的命名 38

2.3.4 类的命名 38

2.3.5 参数的命名 39

2.4 世界上**简单的Windows程序 39

2.4.1 总是从WinMain()开始 40

2.4.2 程序剖析 41

2.4.3 选择一个信息框 42

2.5 现实中的Windows应用程序 44

2.6 Windows类 45

2.7 注册Windows类 50

2.8 创建窗口 50

2.9 事件处理程序 52

2.10 主事件循环 57

2.11 产生一个实时事件循环 60

2.12 打开多个窗口 61

2.13 小结 63

第3章 高 级Windows编程 64

3.1 使用资源 64

3.1.1 整合资源 66

3.1.2 使用图标资源 66

3.1.3 使用光标资源 68

3.1.4 创建字符串表资源 71

3.1.5 使用.WAV声音资源 73

3.1.6 使用编译器创建.RC文件 76

3.2 使用菜单 77

3.2.1 创建菜单 77

3.2.2 装载菜单 79

3.2.3 响应菜单事件消息 82

3.3 GDI(图形设备接口)简介 86

3.3.1 重拾WM_PAINT信息 86

3.3.2 视频显示基础和色彩(Video Display Basics and Color) 90

3.3.3 RGB和调色板模式 91

3.3.4 基本文本显示 92

3.4 处理重要事件 97

3.4.1 Windows操作 97

3.4.2 处理键盘事件 101

3.4.3 处理鼠标事件 107

3.5 自行发送消息 109

3.6 小结 111

第4章 Windows GDI、控件和灵感 112

4.1 高 级GDI绘图 112

4.1.1 掀开图形设备描述表的盖头来 112

4.1.2 颜色、画笔和画刷 113

4.1.3 使用画笔 114

4.1.4 使用画刷 116

4.2 点、线、平面多边形和圆 117

4.2.1 绘制点 118

4.2.2 绘制线段 119

4.2.3 绘制矩形 120

4.2.4 绘制圆 122

4.2.5 绘制多边形 123

4.3 深入文本和字体 124

4.4 定时高于一切 125

4.4.1 WM_TIMER消息 125

4.4.2 低层定时操作 127

4.5 使用控件 130

4.5.1 按钮 131

4.5.2 向子控件发送消息 133

4.6 获取信息 136

4.7 T3D游戏控制台程序 141

4.8 小结 145

第 二部分 DirectX和2D基础

第5章 DirectX基础知识和令人生畏的COM 148

5.1 DirectX基础 148

5.1.1 HEL和HAL 150

5.1.2 更多的DirectX基础类 151

5.2 COM:是微软的杰作,还是魔鬼的杰作 153

5.2.1 COM对象是什么 154

5.2.2 接口标识符和GUID的详细内容 156

5.2.3 创建一个类COM对象 157

5.2.4 COM的简要回顾 158

5.2.5 可运行的COM程序 159

5.3 应用DirectX COM对象 162

5.3.1 COM和函数指针 163

5.3.2 创建和使用DirectX界面 166

5.3.3 接口查询 167

5.4 COM的前景 168

5.5 小结 169

第6章 初次邂逅DirectDraw 170

6.1 DirectDraw的接口 170

6.1.1 接口的特性 170

6.1.2 组合使用接口 172

6.2 创建DirectDraw对象 173

6.2.1 对DirectDraw进行错误处理 173

6.2.2 顺便提一下接口 174

6.3 与Windows协作 177

6.4 设置模式 180

6.5 色彩的奥秘 182

6.6 创建显示表面 185

6.6.1 创建一个主显示表面 186

6.6.2 关联调色板 192

6.6.3 绘制像素 192

6.6.4 清理资源 201

6.7 小结 202

第7章 高 级DirectDraw和位图图形 203

7.1 使用高彩模式 203

7.1.1 16位高彩模式 204

7.1.2 获取像素格式 205

7.1.3 24/32位真彩色模式 211

7.2 双缓冲 213

7.3 表面动态 217

7.4 页面切换 220

7.5 显存块移动单元(Blitter) 225

7.5.1 使用Blitter进行内存填充 227

7.5.2 从一个表面向另一个表面复制位图 232

7.6 基础裁剪知识 235

7.6.1 将像素按视口裁剪 235

7.6.2 位图裁剪技巧 236

7.6.3 使用IDirectDrawClipper进行DirectDraw裁剪 241

7.7 使用位图 245

7.7.1 载入.BMP文件 245

7.7.2 使用位图 250

7.7.3 载入8位位图 251

7.7.4 载入16位位图 252

7.7.5 载入24位位图 252

7.7.6 总结位图 253

7.8 离屏表面 253

7.8.1 创建离屏表面 253

7.8.2 在离屏表面上进行Blitting 254

7.8.3 设置Blitter 255

7.8.4 色彩键 255

7.8.5 源色彩键 256

7.8.6 目标色彩键 258

7.8.7 使用Blitter(终于!) 259

7.9 位图的旋转和缩放 260

7.10 离散采样理论 261

7.11 色彩效果 265

7.11.1 256色模式下的色彩动画 265

7.11.2 256色模式下的色彩旋转 270

7.11.3 使用RGB模式的技巧 271

7.12 手动色彩变换及查询表 272

7.13 新的DirectX色彩和Gamma控制接口 272

7.14 将GDI和DirectX联用 273

7.15 DirectDraw的庐山真面目 275

7.15.1 主DirectDraw对象 275

7.15.2 关于表面 277

7.15.3 使用调色板 277

7.16 在窗口模式下使用DirectDraw 278

7.17 小结 285

第8章 矢量光栅化及2D变换 286

8.1 绘制线条 286

8.1.1 Bresenham算法 287

8.1.2 算法的速度优化 292

8.2 基本2D图形裁剪 294

8.2.1 利用点斜式计算两条直线的交点 295

8.2.2 利用一般式计算两条直线的交点 297

8.2.3 利用矩阵式计算两条直线的交点 297

8.2.4 裁剪直线 299

8.2.5 Cohen-Sutherland算法 300

8.3 线框多边形 306

8.3.1 多边形数据结构 307

8.3.2 多边形的绘制及裁剪 308

8.4 2D平面里的变换 310

8.4.1 平移 310

8.4.2 旋转 312

8.4.3 缩放 319

8.5 矩阵引论 320

8.5.1 单位矩阵 322

8.5.2 矩阵加法 322

8.5.3 矩阵乘法 323

8.5.4 使用矩阵进行变换 325

8.6 平移 326

8.7 缩放 327

8.8 旋转 327

8.9 填充实心多边形 329

8.9.1 三角形和四边形类型 330

8.9.2 绘制三角形和四边形 332

8.9.3 三角形解构详述 334

8.9.4 四边形光栅化的一般性讨论 341

8.9.5 多边形的三角化 341

8.10 多边形碰撞检测 345

8.10.1 接近度、边界球/圆 345

8.10.2 边界盒 348

8.10.3 点包含 350

8.11 深入定时和同步 351

8.12 卷轴和摇镜头 353

8.12.1 页面卷轴引擎 353

8.12.2 均匀平铺(Tile)显示引擎 354

8.12.3 稀疏位图平铺显示引擎 358

8.13 伪3D等轴测引擎 359

8.13.1 方法1:基于单元,全二维 359

8.13.2 方法2:基于全屏,具有一些二维或三维的碰撞网络 361

8.13.3 方法3:采用全三维数学运算,使用一个固定的相机视角 362

8.14 T3DLIB1函数库 363

8.14.1 引擎架构 363

8.14.2 新的游戏编程控制台程序 364

8.14.3 基本定义 370

8.14.4 可用的宏 371

8.14.5 数据类型和结构 372

8.14.6 全局定义 375

8.14.7 DirectDraw接口 376

8.14.8 2D多边形函数 379

8.14.9 2D基本图元函数 381

8.14.10 数学和误差函数 385

8.14.11 位图函数 386

8.14.12 调色板函数 390

8.14.13 实用工具函数 392

8.15 BOB引擎 393

8.16 小结 400

第9章 DirectInput输入和力反馈 401

9.1 输入循环 401

9.2 DirectInput序曲 402

9.2.1 DirectInput组件 404

9.2.2 设置DirectInput的一般步骤 404

9.2.3 数据采集模式 405

9.2.4 创建主DirectInput对象 406

9.2.5 101键盘 407

9.2.6 读数据过程中的问题:重获取 413

9.2.7 捕捉鼠标 414

9.2.8 使用游戏杆 418

9.2.9 将输入消息化 428

9.3 力反馈 431

9.3.1 力反馈的物理原理 431

9.3.2 设置力反馈 431

9.3.3 力反馈演示程序 432

9.4 编写一个广泛适用的输入系统:T3DLIB2.CPP 433

9.5 小结 437

第 10章 用DirectSound和DirectMusic演奏乐曲 438

10.1 在PC上对声音编程 438

10.2 从此有了声音… 439

10.3 数码声音与MIDI比较——音质好且存储省 441

10.3.1 数码声音——从“位”开始 442

10.3.2 合成声音与MIDI 443

10.3.3 MIDI概述 444

10.4 发声硬件 444

10.4.1 波表合成 444

10.4.2 波导合成 445

10.5 数码录音:设备和技术 445

10.5.1 录制声音 446

10.5.2 处理声音 446

10.6 DirectSound中的麦克风 446

10.7 初始化DirectSound 448

10.7.1 理解协作等级 449

10.7.2 设定协作等级 450

10.8 主声音缓冲区与辅助声音缓冲区 450

10.8.1 使用辅助缓冲区 450

10.8.2 创建辅助声音缓冲区 451

10.8.3 把数据写入辅助声音缓冲区 453

10.9 渲染声音 454

10.9.1 播放声音 455

10.9.2 停止播放 455

10.9.3 控制音量 455

10.9.4 调整频率 456

10.9.5 调整声道平衡 456

10.10 用DirectSound反馈信息 456

10.11 从磁盘中读取声音数据 458

10.11.1 .WAV文件格式 458

10.11.2 读取.WAV文件 458

10.12 DirectMusic:伟大的试验 462

10.13 DirectMusic的体系结构 463

10.14 初始化DirectMusic 464

10.14.1 初始化COM 464

10.14.2 创建一个演奏对象 464

10.14.3 给演奏对象增加端口 465

10.15 加载一个MIDI段 466

10.15.1 创建一个加载程序 466

10.15.2 加载MIDI文件 466

10.16 操作MIDI段 469

10.16.1 播放一个MIDI段 469

10.16.2 停止一个MIDI段 469

10.16.3 检查MIDI段的状态 469

10.16.4 释放一个MIDI段 470

10.16.5 关闭DirectMusic 470

10.16.6 一些DirectMusic的实例 470

10.17 T3DLIB3声音和乐曲库 470

10.17.1 头文件 471

10.17.2 类型 471

10.17.3 全局变量 472

10.17.4 DirectSound API封装 472

10.17.5 DirectMusic API封装 476

10.18 小结 478

第三部分 核心游戏编程

第 11章 算法、数据结构、 内存管理和多线程 480

11.1 数据结构 480

11.1.1 静态结构和数组 480

11.1.2 链表 481

11.2 算法分析 487

11.3 递归 489

11.4 树结构 490

11.4.1 建立二分查找树(BST) 493

11.4.2 搜索BST 495

11.5 优化理论 497

11.5.1 运用你的头脑 497

11.5.2 数学技巧 498

11.5.3 定点运算 499

11.5.4 循环体展开 502

11.5.5 查找表 502

11.5.6 汇编语言 503

11.6 制作演示 504

11.6.1 预先记录的演示 504

11.6.2 由人工智能控制的演示 505

11.7 保存游戏的手段 505

11.8 实现多人游戏 506

11.8.1 轮流 506

11.8.2 分屏 506

11.9 多线程编程技术 507

11.9.1 多线程编程的术语 508

11.9.2 为何要在游戏中使用线程 509

11.9.3 取得一个线程 510

11.9.4 线程间的消息传递 516

11.9.5 等待合适时机 520

11.9.6 多线程和DirectX 526

11.9.7 高 级多线程编程 526

10.10 小结 527

第 12章 人工智能 528

12.1 人工智能初步 528

12.2 确定性AI算法 529

12.2.1 随机运动 530

12.2.2 跟踪算法 531

12.2.3 反跟踪:闪避算法 534

12.3 模式以及基本控制脚本的编写 535

12.3.1 基本模式 535

12.3.2 具备条件逻辑处理的模式 539

12.4 行为状态系统建模 540

12.4.1 基本状态机 541

12.4.2 加入更多表现个性的行为 544

12.5 用软件对记忆和学习进行建模 546

12.6 计划树和决策树 548

12.6.1 计划编程 549

12.6.2 实现真正的计划生成器 552

12.7 寻路 553

12.7.1 试探法(Trial and Error) 554

12.7.2 轮廓跟踪 555

12.7.3 碰撞规避跟踪 555

12.7.4 路点寻路 556

12.7.5 一个赛车例子 559

12.7.6 可靠的寻路 559

12.8 高 级AI脚本 563

12.8.1 设计脚本语言 563

12.8.2 使用C/C++编译器 565

12.9 人工神经网络 568

12.10 遗传算法 571

12.11 模糊逻辑 573

12.11.1 普通集合论 573

12.11.2 模糊集合理论 574

12.11.3 模糊语言变量及其规则 575

12.11.4 模糊流形与成员关系 577

12.11.5 模糊关联矩阵 581

12.11.6 用模糊化的输入处理FAM 583

12.11.7 暖融融 589

12.12 为游戏创造真正的AI 589

12.13 小结 589

第 13章 基本物理建模 590

13.1 基本物理学定律 591

13.1.1 质量(m) 591

13.1.2 时间(t) 591

13.1.3 位置(s) 592

13.1.4 速率(v) 593

13.1.5 加速度(a) 594

13.1.6 力(F) 597

13.1.7 多维空间中的力 598

13.1.8 动量(P) 598

13.2 线性动量的物理性质:守恒与传递 599

13.3 模拟万有引力效果 601

13.3.1 模拟重力井 603

13.3.2 模拟炮弹弹道 604

13.4 讨厌的摩擦力 607

13.4.1 摩擦基本概念 607

13.4.2 斜面上的摩擦力(高 级) 609

13.5 基本的特殊碰撞反应 611

13.5.1 简单的x,y反弹物理 611

13.5.2 计算任意方向上的平面碰撞反应 614

13.5.3 矢量反射示例 616

13.5.4 线段的交点 617

13.6 实际2D物体间的精 确碰撞响应(高 级) 621

13.7 解决n-t坐标系统 624

13.8 简单运动学 630

13.8.1 求解正向运动学问题 631

13.8.2 解决反向运动学问题 633

13.9 粒子系统 634

13.9.1 每颗粒子都需要的东西 635

13.9.2 设计粒子引擎 635

13.9.3 粒子引擎软件 636

13.9.4 产生初始条件 640

13.9.5 整合微粒系统 642

13.10 创建游戏的物理模型 643

13.10.1 物理建模的数据结构 643

13.10.2 基于帧的模拟与基于时间的模拟 643

13.11 小结 645

第 14章 文字时代 646

14.1 什么是文字游戏 647

14.2 文字游戏如何工作 647

14.3 从外部世界获得输入 650

14.4 语言分析和解析 651

14.4.1 词法分析 655

14.4.2 句法分析 660

14.4.3 语义分析 662

14.5 组成游戏世界 663

14.5.1 表示场景 663

14.5.2 放置物体 665

14.5.3 让事情发生 666

14.5.4 自由移动 666

14.5.5 物品系统 666

14.6 实现视觉、听觉和嗅觉 666

14.6.1 听觉 667

14.6.2 嗅觉 668

14.6.3 视觉 668

14.7 实时响应 670

14.8 错误处理 671

14.9 造访Shadow Land 671

14.10 Shadow Land中使用的语言 671

14.11 编译和运行Shadow Land 673

14.12 小结 674

第 15章 综合运用 675

15.1 Outpost的设计初稿 675

15.1.1 游戏背景 675

15.1.2 设计游戏玩法 676

15.2 用于编写游戏的工具 676

15.3 游戏场景:在太空中卷动 677

15.4 玩家控制的飞船:鬼怪号 678

15.5 小行星带 680

15.6 敌人 681

15.6.1 边哨(Outpost) 681

15.6.2 捕食者太空雷 682

15.6.3 战舰 682

15.7 “宝物” 685

15.8 HUD 685

15.9 粒子系统 688

15.10 玩游戏 689

15.11 编译Outpost 689

15.12 结束语 690

第四部分 附录

附录A 光盘内容简介 694

附录B 安装DirectX和使用C/C++编译器 696

附录C 数学和三角学回顾 699

附录D C++入门 709

附录E 游戏编程资源 727

附录F ASCII表 731

详情

这本书将带领你到达游戏编程技术的另一个层次。本书教你把模糊逻辑学、神经网络和遗传法则运用到视频游戏上去呢?另外本书深入浅出地介绍了物理建模,教你如何将完全碰撞反应、动量传递和正向运动学等内容应用到游戏开发中,并进行实时模拟。

图书摘要

相关图书

Python面向对象编程:构建游戏和GUI
Python面向对象编程:构建游戏和GUI
精通游戏测试(第3版)
精通游戏测试(第3版)
罗布乐思开发官方指南 从入门到实践
罗布乐思开发官方指南 从入门到实践
游戏引擎原理与实践 卷2 高级技术
游戏引擎原理与实践 卷2 高级技术
游戏数值设计
游戏数值设计
游戏引擎原理与实践 卷1 基础框架
游戏引擎原理与实践 卷1 基础框架

相关文章

相关课程