图书介绍

游戏编程权威指南 第4版2025|PDF|Epub|mobi|kindle电子书版本百度云盘下载

游戏编程权威指南 第4版
  • (美)MIKE MCSHAFFRY DAVID“REZ”GRAHAM著;师蓉,李静,李青翠译 著
  • 出版社: 北京:人民邮电出版社
  • ISBN:7115410344
  • 出版时间:2016
  • 标注页数:666页
  • 文件大小:100MB
  • 文件页数:694页
  • 主题词:

PDF下载


点此进入-本书在线PDF格式电子书下载【推荐-云解压-方便快捷】直接下载PDF格式图书。移动端-PC端通用
种子下载[BT下载速度快]温馨提示:(请使用BT下载软件FDM进行下载)软件下载地址页直链下载[便捷但速度慢]  [在线试读本书]   [在线获取解压码]

下载说明

游戏编程权威指南 第4版PDF格式电子书版下载

下载的文件为RAR压缩包。需要使用解压软件进行解压得到PDF格式图书。

建议使用BT下载工具Free Download Manager进行下载,简称FDM(免费,没有广告,支持多平台)。本站资源全部打包为BT种子。所以需要使用专业的BT下载软件进行下载。如BitComet qBittorrent uTorrent等BT下载工具。迅雷目前由于本站不是热门资源。不推荐使用!后期资源热门了。安装了迅雷也可以迅雷进行下载!

(文件页数 要大于 标注页数,上中下等多册电子书除外)

注意:本站所有压缩包均有解压码: 点击下载压缩包解压工具

图书目录

第1章 什么是游戏编程1

1.1 好的方面1

1.1.1 工作2

1.1.2 游戏玩家2

1.1.3 同事3

1.1.4 工具——软件开发工具包(SDK)4

1.1.5 硬件5

1.1.6 平台6

1.1.7 展会9

1.2 不好的地方9

1.2.1 游戏编程很难10

1.2.2 零碎文件10

1.2.3 那不是bug——是特性11

1.2.4 工具12

1.3 黑暗的一面13

1.3.1 命中移动的目标13

1.3.2 加班模式(和加班大餐)13

1.3.3 呸!胡扯15

1.3.4 操作系统地狱15

1.3.5 雇员流动的性质16

1.4 这一切都是值得的,对吗16

第2章 游戏中有什么18

2.1 游戏架构18

2.2 使用游戏架构20

2.3 应用层22

2.3.1 读取输入22

2.3.2 文件系统和资源缓存22

2.3.3 内存管理23

2.3.4 初始化、主循环和关闭23

2.3.5 其他应用层代码24

2.4 游戏逻辑25

2.4.1 游戏状态和数据结构25

2.4.2 物理学和碰撞26

2.4.3 事件26

2.4.4 进程管理器27

2.4.5 命令解释器28

2.5 人类玩家的游戏视图28

2.5.1 图形显示29

2.5.2 音频30

2.5.3 用户界面表示31

2.5.4 进程管理器31

2.5.5 选项31

2.5.6 多人游戏31

2.6 AI代理的游戏视图31

2.7 网络游戏架构32

2.7.1 远程游戏视图33

2.7.2 远程游戏逻辑33

2.8 必须使用DirectX吗34

2.8.1 DirectX的设计理念34

2.8.2 Direct3D或OpenGL35

2.8.3 DirectSound还是35

2.8.4 DirectInput或自己实现36

2.9 其他内容36

2.10 补充书目36

第3章 拯救了我的编码趣闻和风格37

3.1 通用编码风格38

3.1.1 大括号38

3.1.2 一致性39

3.2 智能代码设计实践40

3.2.1 避免隐藏代码和重要操作41

3.2.2 类结构:保持简单42

3.2.3 继承VS.组合42

3.2.4 变坏的虚函数43

3.2.5 使用接口类44

3.2.6 考虑使用工厂45

3.2.7 封装变化的组件46

3.2.8 使用流来初始化对象46

3.3 智能指针和裸指针47

3.3.1 引用计数48

3.3.2 C++的shared_ptr49

3.4 正确使用内存52

3.4.1 了解不同类型的内存53

3.4.2 优化内存访问55

3.4.3 内存对齐56

3.4.4 虚拟内存57

3.4.5 编写自己的内存管理器58

3.5 各种有用的东西59

3.5.1 一个很棒的随机数生成器60

3.5.2 集合的伪随机遍历61

3.5.3 内存池62

3.6 开发出适合自己的风格67

3.7 补充书目68

第4章 生成游戏69

4.1 一个小动机69

4.2 创建项目70

4.2.1 生成配置70

4.2.2 创建坚不可摧的目录结构71

4.2.3 将游戏引擎和工具放在何处73

4.2.4 设置Visual Studio生成选项74

4.2.5 多平台项目76

4.3 源代码库和版本控制77

4.3.1 微软Visual SourceSafe的相关历史79

4.3.2 Subversion和TortoiseSVN79

4.3.3 Perforce软件的Perforce80

4.3.4 Avid的AlienBrain81

4.3.5 使用源代码控制分支81

4.4 生成游戏:一门黑色艺术84

4.4.1 自动化生成85

4.4.2 生成计算机85

4.4.3 自动化生成脚本85

4.5 创建生成脚本87

4.5.1 标准生成87

4.5.2 里程碑生成88

4.5.3 多个项目和共享代码90

4.5.4 最后的建议91

第5章 游戏初始化和关闭92

5.1 初始化10192

5.2 C++初始化的一些陷阱93

5.3 游戏的应用层95

5.3.1 WinMain:Windows入口点95

5.3.2 应用层:GameCodeApp97

5.3.3 InitInstance():检查系统资源97

5.3.4 检查游戏的多个实例98

5.3.5 检查硬盘空间99

5.3.6 检查内存99

5.3.7 计算CPU速度100

5.3.8 你拥有的是个垃圾袋吗101

5.3.9 初始化资源缓存101

5.3.10 加载文本字符串102

5.3.11 脚本管理器和事件系统104

5.3.12 初始化DirectX并创建窗口104

5.3.13 创建游戏逻辑和游戏视图105

5.3.14 设置游戏保存目录105

5.3.15 预加载从缓存中选定的资源106

5.4 收尾工作:干净漂亮地退出107

5.4.1 我怎样才能离开呢107

5.4.2 强制关闭模态对话框109

5.4.3 关闭游戏110

5.4.4 游戏机怎么样110

5.5 进入和退出111

第6章 游戏主体和组件架构112

6.1 初次尝试创建游戏主体112

6.2 组件架构115

6.3 创建主体和组件116

6.4 定义主体和组件120

6.5 存储并访问主体122

6.6 将它们组合起来123

6.7 数据共享124

6.7.1 直接访问125

6.7.2 事件125

6.7.3 两全其美126

第7章 主循环的控制127

7.1 组织主循环127

7.1.1 硬编码的更新127

7.1.2 多线程主循环128

7.1.3 一种混合技术129

7.1.4 简单的协同式多任务处理器131

7.1.5 非常简单的进程示例:DelayProcess135

7.1.6 Process派生类的使用137

7.2 良好地适应操作系统137

7.3 使用DirectX 11框架138

7.3.1 渲染和呈现显示138

7.3.2 用于更新和渲染的回调函数139

7.4 我现在可以制作游戏了吗141

第8章 游戏数据的加载与缓存142

8.1 游戏资源:格式和存储要求143

8.1.1 3D对象网格和环境143

8.1.2 动画数据145

8.1.3 地图/关卡数据146

8.1.4 纹理数据146

8.1.5 位图颜色深度147

8.1.6 声音和音乐数据149

8.1.7 视频和预渲染的过场动画150

8.2 资源文件152

8.2.1 将资源打包到一个文件中153

8.2.2 打包资源的其他好处153

8.2.3 数据压缩和性能154

8.2.4 Zlib:开源压缩154

8.3 资源高速缓存158

8.3.1 IResourceFile接口161

8.3.2 ResHandle:跟踪加载的资源161

8.3.3 IResourceLoader接口和DefaultResourceLoader163

8.3.4 ResCache:简单的资源高速缓存163

8.3.5 将资源缓存入DirectX等169

8.3.6 世界设计和高速缓存预测170

8.4 我的缓存不够用了173

第9章 输入设备编程174

9.1 获取设备状态174

9.2 使用XInput或DirectInput177

9.3 一些安全提示179

9.4 使用双轴控制器182

9.4.1 捕获桌面上的鼠标182

9.4.2 使用鼠标拖拽184

9.5 使用游戏控制器186

9.5.1 非灵敏区187

9.5.2 正常输入189

9.5.3 单杆、双杆、红色拉杆和蓝色拉杆190

9.5.4 增加控制值190

9.6 使用键盘191

9.6.1 Mike的键盘窥探器191

9.6.2 GetAsyncKeyState()和其他函数195

9.6.3 处理Windows中的Alt键195

9.7 什么?没有跳舞毯195

第10章 用户界面编程197

10.1 DirectX的文本助手和对话框资源管理器197

10.2 人类的游戏视图198

10.3 WASD移动控制器206

10.4 屏幕元素208

10.5 自定义的MessageBox对话框210

10.6 模态对话框215

10.7 控件218

10.8 控件识别219

10.9 命中测试和焦点顺序221

10.10 控件状态222

10.11 更多控件属性223

10.11.1 热键223

10.11.2 工具提示223

10.11.3 上下文相关帮助224

10.11.4 可拖拽224

10.11.5 声音和动画224

10.12 最后的用户界面提示225

第11章 游戏事件管理226

11.1 游戏事件226

11.1.1 事件和事件数据227

11.1.2 事件监听器委托230

11.1.3 事件管理器231

11.1.4 示例:将所有内容整合在一起238

11.2 哪些游戏事件是重要的239

11.3 事件和进程的区别241

11.4 补充书目241

第12章 使用Lua编写脚本242

12.1 游戏编程语言的简史242

12.1.1 汇编语言243

12.1.2 C/C++244

12.1.3 脚本语言245

12.2 使用脚本语言246

12.2.1 快速原型法246

12.2.2 专注于设计247

12.2.3 速度和内存成本247

12.2.4 它们之间的界限是什么247

12.3 脚本语言集成策略248

12.3.1 自己进行编写248

12.3.2 使用现有的语言248

12.3.3 选择一种脚本语言249

12.3.4 Python249

12.3.5 Lua249

12.4 Lua速成课程250

12.4.1 注释250

12.4.2 变量250

12.4.3 函数252

12.4.4 表253

12.4.5 流程控制255

12.4.6 操作符257

12.4.7 接下来是什么257

12.5 Lua 中的面向对象编程258

12.5.1 元表259

12.5.2 创建一个简单的类抽象261

12.6 内存管理263

12.7 将Lua绑定到C++263

12.7.1 Lua C API263

12.7.2 tolua++263

12.7.3 luabind264

12.7.4 LuaPlus264

12.8 LuaPlus速成课程264

12.8.1 LuaState264

12.8.2 LuaObject265

12.8.3 表266

12.8.4 全局267

12.8.5 函数268

12.8.6 从 Lua调用C++函数269

12.9 将所有内容整合在一起271

12.9.1 管理 Lua状态271

12.9.2 脚本导出273

12.9.3 进程系统274

12.9.4 事件系统282

12.9.5 脚本组件287

12.10 Lua开发和调试289

12.11 结语289

12.12 补充书目289

第13章 游戏音频290

13.1 声音的工作原理290

13.1.1 数字录音和重现291

13.1.2 声音文件293

13.1.3 线程和同步的简介293

13.2 游戏语音系统架构294

13.2.1 声音资源和句柄295

13.2.2 IAudioBuffer接口和AudioBuffer类303

13.2.3 IAudio接口和Audio类305

13.2.4 DirectSound实现308

13.2.5 声音进程317

13.2.6 启动音效321

13.3 其他技术难题322

13.3.1 声音和游戏对象322

13.3.2 定时和同步322

13.3.3 混合问题324

13.4 一些随记326

13.4.1 数据驱动的声音设置326

13.4.2 背景环境声音和音乐327

13.4.3 语音328

13.5 结语330

第14章 3D图形基础331

14.1 3D图形流水线331

14.2 3D数学101332

14.2.1 坐标和坐标系333

14.2.2 向量数学335

14.3 C++数学类340

14.3.1 向量类340

14.3.2 矩阵数学341

14.3.3 四元数数学351

14.3.4 变换358

14.3.5 几何体360

14.3.6 光照、法线和颜色361

14.3.7 材质363

14.3.8 贴有纹理的顶点365

14.3.9 纹理365

14.3.10 二次采样365

14.3.11 mip映射367

14.3.12 ID3D11Device和 ID3D11DeviceContext简介367

14.3.13 在D3D11中加载纹理368

14.3.14 三角形网格370

14.4 你还在吗373

第15章 3D顶点和像素着色器374

15.1 顶点着色器和着色器语法375

15.2 编译顶点着色器379

15.3 顶点着色器的C++辅助类380

15.4 像素着色器386

15.5 像素着色器的C++辅助类387

15.6 使用着色器辅助类进行渲染390

15.7 着色器——这只是一个开始391

15.8 补充书目391

第16章 3D场景392

16.1 场景图基础392

16.1.1 ISceneNode接口类392

16.1.2 SceneNodeProperties和 RenderPass394

16.1.3 SceneNode——一切都是从这里开始的396

16.1.4 Scene类401

16.2 特殊的场景图节点408

16.2.1 独立渲染通道的实现408

16.2.2 一个简单的摄像机411

16.2.3 在场景中放入灯光413

16.2.4 天空的渲染416

16.2.5 在场景中使用网格420

16.3 遗漏的内容424

16.4 还没满足425

16.5 补充书目425

第17章 碰撞和简单的物理学426

17.1 物理学中的数学知识427

17.1.1 米、英尺、肘尺还是 Kellicam427

17.1.2 距离、速度和加速度427

17.1.3 质量、加速度和力428

17.1.4 转动惯量、角速度和扭矩431

17.1.5 距离和交集的计算431

17.2 选择一种物理SDK432

17.3 对象属性434

17.4 碰撞体435

17.4.1 良好的碰撞几何体的要求436

17.4.2 可见几何体VS碰撞几何体437

17.4.3 人类角色的碰撞体437

17.4.4 特殊对象:楼梯、门道和树439

17.5 碰撞系统的使用439

17.6 集成一个物理SDK441

17.6.1 Bullet SDK的组件444

17.6.2 初始化445

17.6.3 关闭446

17.6.4 物理系统的更新447

17.6.5 创建简单的物理对象449

17.6.6 凸面网格的创建451

17.6.7 触发器的创建452

17.6.8 力和力矩的应用453

17.6.9 物理调试渲染器454

17.6.10 接收碰撞事件455

17.6.11 物理SDK集成的最后内容457

17.7 等一下,我还有话要说458

第18章 游戏AI简介459

18.1 AI技术459

18.1.1 硬编码AI460

18.1.2 随机化461

18.1.3 加权随机462

18.2 有限状态机463

18.3 决策树467

18.4 模糊逻辑471

18.5 效用理论474

18.6 以目标为导向的行动计划477

18.7 路径查找478

18.7.1 A*(A-Star)479

18.7.2 动态规避481

18.8 补充书目482

第19章 多玩家游戏的网络编程483

19.1 互联网的工作原理483

19.1.1 Winsock还是Berkeley484

19.1.2 Internet地址484

19.1.3 域名系统486

19.1.4 有用的程序和文件487

19.2 套接字API488

19.2.1 套接字效用函数488

19.2.2 域名服务(DNS)函数490

19.2.3 套接字初始化和关闭491

19.2.4 创建套接字和设置套接字选项491

19.2.5 服务器函数495

19.2.6 套接字读取和写入498

19.3 使用套接字制作一款多玩家游戏499

19.3.1 数据包类500

19.3.2 核心套接字类501

19.3.3 用于监听的套接字类506

19.3.4 套接字管理器类508

19.4 核心客户端类515

19.5 核心服务器端类516

19.6 将套接字连接到事件系统中517

19.7 如果真的这么简单就好了522

第20章 多道程序设计简介523

20.1 多道程序设计是什么523

20.2 创建线程525

20.3 进程同步527

20.3.1 测试与置位、信号量和互斥528

20.3.2 Windows 临界区528

20.4 有趣的线程问题530

20.5 线程安全531

20.6 GameCode4 中的多线程类531

20.6.1 RealtimeProcess类532

20.6.2 从实时进程发送事件534

20.6.3 接收实时进程中的事件537

20.7 Zip文件的后台解压缩538

20.8 进一步工作540

20.9 关于硬件541

20.10 关于未来541

20.11 补充书目542

第21章 “茶壶大战”游戏543

21.1 制作游戏544

21.2 核心类的创建545

21.2.1 茶壶大战的应用层545

21.2.2 游戏逻辑546

21.2.3 人类玩家的游戏视图553

21.3 游戏事件556

21.4 游戏玩法556

21.4.1 关卡的加载557

21.4.2 主体管理器558

21.4.3 发送和接收事件560

21.4.4 进程562

21.5 留给读者的练习563

第22章 C#中简单的游戏编辑器565

22.1 为什么要使用C#565

22.2 如何将编辑器组合起来565

22.3 编辑器架构566

22.3.1 应用层566

22.3.2 编辑器的逻辑类567

22.3.3 编辑器视图568

22.3.4 访问游戏引擎的函数569

22.3.5 创建DLL578

22.3.6 编辑器架构的封装578

22.4 C#编译器应用程序579

22.4.1 托管代码和非托管代码之间的区别580

22.4.2 NativeMethods类581

22.4.3 Program类582

22.4.4 MessageHandler类583

22.5 C#编辑器用户界面585

22.5.1 EditorForm类585

22.5.2 ActorComponentEditor类595

22.6 后续工作603

22.7 补充材料604

第23章 对游戏进行调试和分析605

23.1 处理错误的艺术606

23.2 调试基础607

23.2.1 调试器的使用609

23.2.2 安装Windows符号文件611

23.2.3 对全屏游戏进行调试612

23.2.4 远程调试613

23.2.5 对小存储器转储文件(Minidump)进行调试615

23.3 图形调试和着色器调试616

23.4 调试技术617

23.4.1 调试是一次实验617

23.4.2 重现bug619

23.4.3 降低复杂度620

23.4.4 设置下一条语句620

23.4.5 汇编级调试621

23.4.6 给代码添加调料623

23.4.7 提取调试信息624

23.4.8 Lint和其他代码分析器625

23.4.9 Nu-Mega的BoundsChecker和运行时分析器625

23.4.10 消失的bug625

23.4.11 调整数值626

23.4.12 caveman调试626

23.4.13 当一切方法都失败时627

23.5 创建错误日志系统628

23.6 不同类型的bug633

23.6.1 内存泄漏和堆损坏634

23.6.2 游戏数据损坏637

23.6.3 堆栈损坏638

23.6.4 剪切和粘贴bug639

23.6.5 空间不足639

23.6.6 在发布模式(Release Mode)中出现的bug640

23.6.7 惹是生非的多线程640

23.6.8 奇怪的bug641

23.7 性能分析642

23.7.1 性能的测量642

23.7.2 代码的优化642

23.7.3 折中方案643

23.7.4 过度优化644

23.8 结束小思644

23.9 补充书目644

第24章 驶向结束645

24.1 问题的整理645

24.1.1 质量646

24.1.2 代码650

24.1.3 内容653

24.2 应付大麻烦655

24.2.1 项目进度严重拖延655

24.2.2 人事相关问题661

24.2.3 竞争对手会置你于死地662

24.2.4 到底有没有出路663

24.2.5 最后一个建议:不要惊慌664

24.3 光明就在前方——毕竟这不是一场训练664

24.3.1 测试存档664

24.3.2 补丁build或产品演示665

24.3.3 事后分析665

24.3.4 如何利用你的时间666

热门推荐