第三版全书学习地图
Beginning C++ Game Programming 第三版 21 章学习路线:通过 Timber、Pong、Zombie Arena 与 Run! 四个项目,从 C++20 与 SFML 基础走到完整游戏架构。
学习目标
- 能说出第三版 21 章在 Timber、Pong、Zombie Arena 与 Run! 四个项目中的位置、产出和依赖关系
- 能设计一条按语言、对象、实时循环、世界规则和表现系统递进的学习路径,并判断何时需要回补前置章节
- 能使用预测、实现、日志、测试、测量和干净构建证据验收每章,而不是以“代码能运行”代替掌握
从“这不是旧版十章目录”开始
本书当前对齐的是 2024 年第三版《Beginning C++ Game Programming》,使用 C++20 与 SFML,共 21 个官方章节。旧学习地图把它压成“10 章、三板块”,会让第 11 至 21 章的资源管理、对象通信、Camera、Animator、空间音频和 shaders 全部失去位置。
↡以 21 个官方章节和四个逐步扩大的游戏项目组织的本书版本。不是把语法学完再突然做游戏,而是每学一组语言能力,立即放入可玩的垂直切片。
↡从输入、规则、状态提交到声音与画面都能运行和验证的一小段完整功能。让每章都有可观察结果,也迫使所有权和阶段边界尽早暴露。
项目一:Timber,章节 1 至 5
↡用精灵、输入、时间、分支、循环、函数、碰撞和声音完成的第一个 SFML 游戏。第 1 章搭建窗口与游戏循环;第 2 章用变量、运算符和决策动画化精灵;第 3 章加入 string、SFML Time、玩家输入和 HUD;第 4 章使用循环、数组、switch、枚举和函数实现树枝等机制;第 5 章加入碰撞、声音与终局条件。
这一段的目标不是背语法,而是理解实时程序每帧都按“事件、输入、update、draw”推进。变量是持续状态,KeyPressed 是边沿,dt 让速度与帧率解耦。
Chapter 1 window + loop
Chapter 2 state + decisions
Chapter 3 input + time + HUD
Chapter 4 arrays + functions + mechanics
Chapter 5 collision + sound + end state项目二:Pong,章节 6 至 7
↡用类、封装、对象协作、AABB 碰撞与简单物理完成的第二个项目。第 6 章把 Ball、Bat 等状态与行为放入类,建立构造、封装和对象生命周期;第 7 章用 AABB、速度反射和接触修正完成游戏。这里首次要求区分“检测重叠”和“解算运动”:碰撞结果必须修正位置和速度,不能只播放声音。
↡由轴对齐矩形范围相交判断对象接触的碰撞方法。Pong 是后续 GameObject 架构的最小预演。若类只变成装全局变量的袋子,Zombie Arena 的对象数量一增加就会失控。
项目三:Zombie Arena,章节 8 至 14
↡整合 View、STL、资源管理、对象群、投射物、HUD、声音与文件存档的第三个项目。第 8 章从 SFML Views 和玩家视野开始;第 9 章使用引用、sprite sheets 与 vertex arrays;第 10 章引入指针、STL 和纹理管理;第 11 章实现 TextureHolder 并构建僵尸群;第 12 章加入碰撞、Pickup 和 Bullet;第 13 章分层 world/HUD View;第 14 章完成音效、文件 I/O、最高分、升级、波次与重启。
World View terrain -> zombies -> bullets -> effects
HUD View health -> ammo -> score -> wave
Screen Overlay home -> level-up -> game-over与
↡世界坐标与固定界面坐标使用独立 View 并按明确顺序绘制的结构。是这一项目的关键边界。资源所有者必须比 Sprite 长寿,HUD 只投影玩法快照,文件保存采用验证和安全发布,而不是把磁盘内容当可信输入。
项目四:Run! 架构,章节 15 至 16
↡使用组件式对象、Factory、事件命令和空间表现完成的无尽跑酷项目。第 15 章启动 Run!,以继承与多态定义 Update/Graphics 行为,用 Factory 组装 GameObject,并辨析组件对象与 ECS;第 16 章实现 SoundEngine、游戏逻辑、对象间通信和 Player。
↡根据 archetype 验证资源和参数,组装完整对象后一次交给世界的创建边界。 ↡对象通过稳定 id、过去式事件、延迟命令和只读查询协作的协议。这一阶段把“谁能修改世界”说清楚:update 追加命令,世界在安全点提交,声音与 HUD 消费事实,不保存易失裸指针。
Run! 行动系统,章节 17 至 19
第 17 章实现 Graphics draw calls、Camera 类、main/radar view 与 timer text;第 18 章编码可达平台、Player controls、Animator 和 player animations;第 19 章构建 interactive menu,并用 GameObject 的 Graphics 与 Update 组合制造雨效。
↡封装 sf::View、可见范围和跟随策略,供主视图或雷达独立观察世界的对象。 ↡按 dt 在 AnimationClip 的帧与时长之间推进、但不决定玩法状态的组件。 ↡Home、Playing、Paused 与 GameOver 的互斥阶段及合法转换。三章共同证明分阶段设计:逻辑先提交;Camera 和 Animator 读取提交状态;菜单决定是否推进逻辑时间;雨效作为可降级表现不能阻塞玩法。
Run! 完成阶段,章节 20 至 21
第 20 章加入 Fireball、SFML audio Listener、声音空间化、SoundEngine voice 与 HUD class;第 21 章用 CameraGraphics 实现 parallax backgrounds,通过 OpenGL 上下文运行 GLSL shaders,并执行 completed game 门禁。
↡按声源与 Listener 的世界相对位置计算方向和距离衰减的音频表现。 ↡多个背景层按不同相机位移因子移动以产生深度感的表现。 ↡由 GLSL 编写并在 GPU 上处理顶点或像素的程序。视觉与音频可以降级,玩法事实不能变化。固定回放在开关 shader 后必须得到相同平台、伤害、得分和 GameOver。
知识依赖:为什么不能任意跳章
↡资源、对象和组件由明确所有者管理,离开作用域时自动释放的生命周期策略。贯穿 TextureHolder、Factory、SoundBuffer、voice 和 shader。跳过指针/STL 直接做 Run!,常见结果是组件互相持有裸指针、资源先析构、容器遍历中删除对象。
types/flow/functions
-> classes/references/STL/RAII
-> game loop/collision/commands
-> camera/animation/audio/HUD
-> particles/shaders/release gate若某章卡住,按依赖向前追一层:Animator 错误先检查 dt 与状态边沿;SoundEngine 错误先检查事件事实与 Buffer 生命周期;shader 错误先确认普通 RenderStates 路径正确。
每章怎样才算掌握
↡证明章节目标已达到所需的预测、运行日志、边界测试、测量和干净复现材料。不是“读完”或“编译过”。先预测输入后的状态变化,再实现最小切片;记录帧号、对象 id、命令与事件;覆盖暂停、重启、极端 dt、资源缺失;测量对象、draw calls、voice;最后固定 seed 重放。
Given fixed config + seed + initial world
When recorded intents + fixed logical steps
Then same commands + events + snapshots
And clean build runs without hidden local assets推荐学习节奏
每章分三轮:第一轮只看目标与图,先写预测;第二轮运行代码并用日志跟踪一条事实链;第三轮完成练习和失败注入。每个项目结束做一次纵向复盘,不能把四个项目当 21 个互不相关的示例。 章节编号只是阅读顺序,真正决定能否继续的是前置事实、所有权和时间协议是否已经用测试证明。
↡完成一个项目后,从输入到表现重新追踪完整事实链并检查前面章节边界的复习。Timber 复盘实时循环;Pong 复盘对象与碰撞;Zombie Arena 复盘资源、容器和分层 View;Run! 复盘 Factory、命令事件、Camera、Animator、音频、shader 与发布门禁。
小结
- 第三版是 21 章、四个项目,不是旧版十章摘要
- Timber 建立实时循环,Pong 建立 OOP 与碰撞,Zombie Arena 放大资源与世界管理
- Run! 用 Factory、组件行为、事件命令、Camera、Animator、空间音频和 shader 完成工程闭环
- 学习顺序沿语言、所有权、实时规则、表现和发布逐层递进
- 每章必须有预测、日志、边界测试、测量与干净复现证据
名词解释
本章出现的专业名词,用大白话再讲一遍。
- 第三版路线
以 21 个官方章节和四个递进项目组织的学习路线。
- 垂直切片
输入、规则、提交与表现都可运行验证的一小段完整功能。
- Timber 项目
覆盖基础 C++、SFML 循环、碰撞和声音的首个项目。
- 实时循环
按固定顺序反复执行输入、更新和绘制的结构。
- Pong 项目
用类、AABB 和物理解算完成的第二个项目。
- AABB
通过轴对齐矩形范围相交检测接触的方法。
- Zombie Arena
整合 View、STL、资源、对象群、HUD 和文件的项目。
- TextureHolder
集中拥有并按键提供纹理长寿命引用的组件。
- 分层 View
世界与固定界面使用独立坐标映射的绘制结构。
- Run! 项目
以组件式对象、Factory 和事件命令构建的跑酷项目。
- Factory
验证并组装完整对象后交给世界的创建边界。
- 对象通信协议
稳定 id、过去式事件、延迟命令与只读查询的协作协议。
- Camera
封装 View、可见范围和跟随策略的观察对象。
- Animator
按 dt 采样动画片段但不决定玩法的组件。
- GamePhase
Home、Playing、Paused、GameOver 与合法转换。
- 空间音频
按声源与 Listener 相对位置计算方向和衰减。
- 视差背景
背景层以不同相机位移比例移动产生深度感。
- shader
- 运行在 GPU 顶点或片段阶段的程序。
- RAII 所有权
由明确所有者和作用域管理资源生命周期的策略。
- 章节证据
预测、日志、测试、测量和干净复现材料。
- 项目复盘
项目结束后重新追踪完整事实链的纵向复习。
练习
- 问题 1:恢复第三版路线。 不看页面,写出四个项目的章节范围、核心能力和最终产物。
- 问题 2:诊断跳章失败。 学习者在 Run! 中遇到悬空指针、暂停跳帧和 HUD 改坏生命,分别应回补哪条依赖?
- 问题 3:设计章节验收。 为“火球与空间音频”写出预测、日志、边界测试、测量和干净复现证据。