具体描述
1.专业经典
本书由世嘉一线开发者执笔,并被选为世嘉新人培训教材,荣获游戏开发者奥斯卡CEDEC AWARDS 2009著作奖。
2.系统全面
全方位介绍游戏开发者必须掌握的基础技术,包括游戏编程、数学和物理等,内容充实,帮助读者建立起一套扎实的知识体系。
3.实践导向
不借助任何引擎,从简单的命令行游戏开发讲起,到2D游戏开发,最终带领读者开发出一个3D游戏,并在此过程中介绍游戏开发中会遇到的各种问题及解决方案,实践性强。读者可下载随书附带的源码,边做边学。
4.拒绝枯燥
采用口语化的行文方式,以设计思路为切入点进行讲解,每一步都有明确的逻辑依据,让读者在知道“怎么做”的同时,明白“为什么”这么做。
作者简介
作者简介:
平山尚
1977年生于日本北海道,曾在京都大学研究生院工学研究科进行基因研究,毕业后进入世嘉株式会社,参与了《电脑战机》(PS2)、《超级网球大奖赛3》(AC、PS3)的开发。著有《我的第一本编程书》。
译者简介:
罗水东
游戏开发工程师,15年软件和游戏开发经验。热爱技术,乐于分享心得。目前主要关注的领域为3D休闲游戏开发和底层引擎技术。
目录信息
第1章 第一个游戏 2
1.1 开发一个益智游戏 3
1.2 示例代码解说 7
1.3 添加读取场景数据的功能 16
1.4 C++ 课堂 21
1.5 补充内容:标志位和位运算 26
1.6 补充内容:指针和内存 34
1.7 补充内容:引用 41
1.8 本章小结 46
第2章 从像素开始学习2D 图形处理 47
2.1 什么是2D 图形处理 48
2.2 准备工作 50
2.3 打印一个点 54
2.4 移植《箱子搬运工》 55
2.5 补充内容:结束处理 58
2.6 本章小结 60
第3章 使用图片素材 61
3.1 读取图片文件 62
3.2 带图片的《箱子搬运工》的示例代码 72
3.3 使用透明通道 75
3.4 头文件包含关系的组织策略 82
3.5 补充内容:透明混合的性能优化 86
3.6 补充内容:加法混合 88
3.7 本章小结 90
第4章 实时游戏 91
4.1 什么是实时游戏 92
4.2 运行动画 95
4.3 带动画的《箱子搬运工》 96
4.4 获得游戏的帧率 101
4.5 解决帧率差异 103
4.6 补充内容:根据帧率变化动态改变游戏运行速度 105
4.7 补充内容:影像撕裂现象 110
4.8 本章小结 111
第5章 简单的状态迁移 113
5.1 往类库追加功能 114
5.2 相对直接的做法 117
5.3 试着增加状态 119
5.4 代码审查 122
5.5 示例代码解说 128
5.6 本章小结 136
第6章 文本绘制方法 137
6.1 字体图片 138
6.2 文本绘制函数 138
6.3 一些改进 140
6.4 成果验证 142
6.5 示例代码解说 143
6.6 注意著作权 147
6.7 示例类库的功能 147
6.8 本章小结 148
第7章 动作游戏初体验 149
7.1 用到的类库 150
7.2 开发《炸弹人》 151
7.3 示例代码解说 152
7.4 添加背景显示 157
7.5 配置移动的对象 164
7.6 游戏的改进方向 169
7.7 本章小结 170
第8章 2D 平面内的碰撞处理 171
8.1 碰撞检测 172
8.2 碰撞响应 174
8.3 发生多个碰撞时的问题 179
8.4 碰撞响应与操作性 180
8.5 移动的物体相互碰撞 184
8.6 《炸弹人》的碰撞处理 184
8.7 本章小结 186
第9章 各种输入设备 187
9.1 获取输入设备实例 188
9.2 键盘 189
9.3 鼠标 189
9.4 手柄 190
9.5 在《炸弹人》游戏中使用手柄 191
9.6 本章小结 193
第10章 状态迁移详解 194
10.1 问题定位 195
10.2 使用继承 195
10.3 实际运用 198
10.4 补充内容:简化状态迁移的代码 201
10.5 补充内容:跨层级的状态迁移处理的改进 204
10.6 补充内容:继承的原理 208
10.7 本章小结 213
第11章 播放声音 215
11.1 关于音频类库 216
11.2 补充内容:计算机如何播放声音 218
11.3 补充内容:音高和音量 219
11.4 补充内容:音色 220
11.5 补充内容:声音的叠加 221
11.6 补充内容:do、re、mi 的原理 222
11.7 补充内容:演奏乐谱 223
11.8 补充内容:读取WAV 音频文件 225
11.9 补充内容:使用Sound 模块来合成声波 226
11.10 本章小结 226
第12章 旋转、缩放与平移 227
12.1 旋转 228
12.2 引入向量和矩阵 241
12.3 利用顶点来实现 246
12.4 缩放 253
12.5 在缩放的同时进行旋转 255
12.6 矩阵的力量 256
12.7 补充内容:旋转公式的由来 263
12.8 补充内容:更为实用的旋转处理方法 266
12.9 补充内容:数学中的矩阵 267
12.10 本章小结 271
第13章 显卡的力量 272
13.1 关于使用的类库 273
13.2 使用显卡绘制三角形 273
13.3 将图像贴到三角形中 275
13.4 混合模式 278
13.5 旋转、缩放和移动 278
13.6 移植《炸弹人》 281
13.7 本章小结 284
第2部分 3D 游戏 285
第14章 绘制立体物体 286
14.1 关于类库 287
14.2 开始制作3D 动作游戏《机甲大战》 287
14.3 绘制三角形 289
14.4 按位置前后绘制物体 290
14.5 将远处的物体绘制得小一些 294
14.6 坐标变换 303
14.7 用矩阵表示透视变换 316
14.8 开始制作《机甲大战》 322
14.9 补充内容:Z 缓存的精度问题 335
14.10 本章小结 338
第15章 类库的封装方法 340
15.1 整体设计 341
15.2 资源的详细内容 342
15.3 试运行 350
15.4 从文件载入 352
15.5 补充内容:将类库从游戏中分离 354
15.6 本章小结 363
第16章 伪XML 文件的读取 364
16.1 确定文件格式 365
16.2 创建前的准备 366
16.3 处理流程 368
16.4 字符串解析 371
16.5 编写代码 373
16.6 运用 375
16.7 示例代码解说 378
16.8 补充内容:生成数据文件 382
16.9 本章小结 385
第17章 编写高性能的代码 386
17.1 算法与时间复杂度 387
17.2 数据结构基础 390
17.3 吞吐量与延迟 402
17.4 并行处理 404
17.5 内存问题 404
17.6 STL 和数据结构 411
17.7 性能瓶颈分析 416
17.8 补充内容:函数调用的开销 417
17.9 补充内容:高效运算与低效运算 420
17.10 本章小结 422
第18章 3D 碰撞处理 423
18.1 长方体的碰撞处理 424
18.2 使用浮点数的碰撞检测 427
18.3 三角形和线段的相交检测 436
18.4 实用性 445
18.5 其他问题 447
18.6 本章小结 448
第19章 《机甲大战》的设计 450
19.1 状态迁移 451
19.2 操作 451
19.3 发射导弹 454
19.4 将功能整合到一起 457
19.5 前端展现 461
19.6 不足之处 463
19.7 本章小结 464
第20章 光照 465
20.1 看见物体的过程 466
20.2 光的衰减过程 469
20.3 尝试计算 473
20.4 整合到《机甲大战》中 479
20.5 补充内容:性能优化 480
20.6 补充内容:更好的绘制效果 483
20.7 本章小结 484
第21章 角色动画 485
21.1 相对运动 486
21.2 层级Model 类 492
21.3 自动构建树结构 495
21.4 将动画数据化 500
21.5 补间方法 506
21.6 引入到《机甲大战》中 518
21.7 补充内容:联立方程组vs 斜率指定法 519
21.8 补充内容:不足之处 520
21.9 本章小结 523
第3部分 通往商业游戏之路 525
第22章 高效的碰撞检测 526
22.1 低效的循环判断方法 527
22.2 性能改善的基本思路 528
22.3 基于排序的方法 531
22.4 依靠分割实现的方法 539
22.5 补充内容:改进等分切割法 545
22.6 补充内容:空间分割的高级技巧 548
22.7 本章小结 552
第23章 数据加载 554
23.1 为何加载时间越来越长 555
23.2 文件加载类 556
23.3 通过合并文件提升性能 562
23.4 通过压缩提升性能 571
23.5 补充内容:多线程异步处理 579
23.6 补充内容:编码技术 590
23.7 补充内容:用于加密的合并与压缩 591
23.8 本章小结 592
第24章 float 的用法 593
24.1 位数限制 594
24.2 float 的实现 594
24.3 位数截断带来的误差 596
24.4 误差程度 597
24.5 减小误差的方法 600
24.6 特别的数 606
24.7 本章小结 608
第25章 随书类库概要 609
25.1 类库中的类 610
25.2 启动设定 611
25.3 Framework 模块 613
25.4 WindowCreator 模块 614
25.5 FileIO 模块 614
25.6 Base 模块 615
25.7 Math 模块 616
25.8 Threading 模块 618
25.9 Input 模块 620
25.10 Sound 模块 620
25.11 PseudoXml 模块 621
25.12 Graphics 模块 621
25.13 Scene 模块 628
25.14 抗锯齿处理 630
25.15 将《机甲大战》改用最终版类库实现 631
25.16 X 文件 633
25.17 本章小结 634
第26章 bug 的应对方法 635
26.1 防火与灭火 636
26.2 bug 的种类 636
26.3 bug 的预防 641
26.4 bug 的处理 654
26.5 《机甲大战》的处理 656
26.6 补充内容:如何检测内存溢出 657
26.7 本章小结 660
第27章 进阶方向 662
27.1 应该学习什么 663
27.2 工具开发 664
27.3 AI 667
27.4 网络 667
27.5 shader 668
27.6 参考文献 669
27.7 一些期待的书 672
后记 675
致谢 676
· · · · · · (收起)
读后感
用户评价
这本书的装帧和纸张质量可以说是上乘之作,拿在手里沉甸甸的,给人一种极其可靠的感觉,这在如今很多轻薄的出版物中是相当难得的。我注意到纸张的纹理非常细腻,印刷的墨色浓郁而不失细节,即便是细小的图表或代码示例,也清晰可见,这对于需要反复查阅的工具书来说简直是福音。这种对物理媒介的尊重,让我觉得作者和出版方对这本书的内容是抱有极高敬意的。我甚至能想象到,在午后的阳光下,泡上一杯咖啡,摊开这本书阅读时的那种沉浸感,是电子屏幕无法比拟的。这种扎实的物理质感,无形中提升了阅读体验的价值,让我更愿意把它当作案头必备的工具书来对待,而不是快速浏览一遍就束之高阁的“快餐”读物。它散发着一种老派匠人的气息,让人对手中的知识充满了敬畏。
从书籍的整体气质来看,它似乎蕴含着一种对“挑战”的推崇,而非一味地强调“简单易懂”。书本的厚度和内容密度预示着这不是一本旨在让你快速学会皮毛的教材,它更像是一份需要你投入时间、耐心和思考才能真正消化的“武功秘籍”。我能感受到其中蕴含的,是经历过无数次失败和迭代后沉淀下来的智慧结晶。那些看似严肃的排版和结构背后,隐藏着的是对游戏开发复杂性的坦诚,它没有试图用花哨的语言去粉饰那些硬核的技术难题,而是以一种近乎“冷峻”的专业姿态,等待着有志之士前来学习和挑战。这种对深度和难度的坚持,在如今追求快速变现的市场环境中,显得尤为珍贵和难能可贵,它指向的是更长远、更本质的专业能力培养。
这本书的气场非常独特,它仿佛自带一种“内部规范文件”的严肃性,让人联想到那些在严格的工业标准下打磨出来的优秀产品。我甚至可以想象到,在某些著名的游戏工作室的资料室里,它会静静地躺在技术手册堆中,散发着权威的光芒。它给人的感觉不是“教你如何做游戏”,而是“告诉你我们是如何思考和实现游戏的设计与工程的”。这种视角上的转变,极大地提高了这本书的含金量。它不再是一个简单的教学指南,而更像是某种企业文化和技术哲学的载体。我期待在阅读过程中,能够捕捉到那些隐藏在文字背后的,关于项目管理、团队协作以及对产品质量近乎苛刻的追求的只言片语,那才是真正能让人脱胎换骨的经验之谈。
这本书的字里行间似乎流淌着一种对“极致性能”的执着追求。从封面传递出的那种坚实感和对细节的关注,让我推测其内容必然是紧密围绕着效率和优化的主题展开的。我好奇地想知道,在讲解具体的技术实现时,作者会如何处理那些关于资源受限环境下的巧妙取舍和权衡艺术。优秀的教材往往不仅仅告诉你“怎么做”,更重要的是告诉你“为什么这么做比别的方法更好”。我期待它能深入剖析那些经典的、被时间检验过的底层逻辑和架构设计,那些能让游戏在不同硬件平台上都能流畅运行的“黑科技”。这种对技术根基的夯实,是区分普通开发者与优秀工程师的关键,而这本书似乎正是瞄准了这一核心需求,提供了一种深入骨髓的学习路径。
这本书的封面设计颇具匠心,那种复古与现代交织的视觉风格,一下子就抓住了我的眼球。它散发着一种独特的、仿佛能穿越时空的气息,让人联想到那个黄金时代的街机厅和家用主机大战的硝烟弥漫。我拿起它的时候,心里就涌起一种强烈的期待,希望能从中挖掘出那些被时光掩埋的秘密,那些关于像素艺术、芯片音乐和早期游戏逻辑的真知灼见。拿到书后,我迫不及待地翻阅了一下目录,虽然内容本身我还没来得及深入研究,但光是看到那些章节标题的排版和用词,就感觉作者对游戏开发的理解是相当深刻和全面的。那种布局的严谨性,以及对技术术语的精准拿捏,都暗示着这本书绝非泛泛而谈的入门读物,而更像是一份精心打磨的内部资料,充满了行业特有的“黑话”和实战经验的沉淀。我尤其欣赏它在视觉上传达出的那种专业性,这让我相信,即便是初次接触这个领域的读者,也能从中感受到一股强大的专业力量的指引。
书通俗易懂非常棒,这在游戏开发入门书籍中是难得一见,因为它拯救我这个曾经无数次想开发游戏最终因为书籍太难懂而失败的人。所以我感谢此书的作者也感谢为了翻译此书三年来兢兢业业呕心沥血的翻译工作人员。给你点个赞👍❤
书通俗易懂非常棒,这在游戏开发入门书籍中是难得一见,因为它拯救我这个曾经无数次想开发游戏最终因为书籍太难懂而失败的人。所以我感谢此书的作者也感谢为了翻译此书三年来兢兢业业呕心沥血的翻译工作人员。给你点个赞👍❤
书是好书,就是名字看起来不太吸引人。。。又是“培训新人”又是“教材”的,给人一种拒人千里的感觉,但其实该作者恰恰以生动易懂为特点,全然没有教科书的那种死板生硬。
书是好书,就是名字看起来不太吸引人。。。又是“培训新人”又是“教材”的,给人一种拒人千里的感觉,但其实该作者恰恰以生动易懂为特点,全然没有教科书的那种死板生硬。
书是好书,就是名字看起来不太吸引人。。。又是“培训新人”又是“教材”的,给人一种拒人千里的感觉,但其实该作者恰恰以生动易懂为特点,全然没有教科书的那种死板生硬。