《游戏编程算法与技巧》介绍了大量今天在游戏行业中用到的算法与技术。《游戏编程算法与技巧》是为广大熟悉面向对象编程以及基础数据结构的游戏开发者所设计的。作者采用了一种独立于平台框架的方法来展示开发,包括2D 和3D 图形学、物理、人工智能、摄像机等多个方面的技术。《游戏编程算法与技巧》中内容几乎兼容所有游戏,无论这些游戏采用何种风格、开发语言和框架。
《游戏编程算法与技巧》的每个概念都是用C#、Java 或C++ 程序员直观明白的伪代码阐述的,并且这些伪代码都已被作者改进和验证过。《游戏编程算法与技巧》中每章末均配有习题或练习,以帮助读者对所学内容进行巩固。《游戏编程算法与技巧》最后,作者详细分析了两款完整的游戏,清楚展现了前面章节讲到的很多技术和算法。
目录
- 第1 章游戏编程概述. . . . . . . . . . . . . . . . . . . . . . . 1
- 游戏编程的发展2
- Atari 时期(1977—1985 年) 2
- NES 和SNES 时期(1985—1995 年) 3
- PS 和PS2 时期(1995—2005 年) 3
- Xbox360、PS3 和Wii 时期(2005—2013 年) 3
- 游戏的未来4
- 游戏循环4
- 传统的游戏循环4
- 多线程下的游戏循环6
- 时间和游戏8
- 真实时间和游戏时间8
- 通过处理时间增量来表示游戏逻辑8
- 游戏对象10
- 游戏对象的类型10
- 游戏循环中的游戏对象11
- 总结13
- 习题13
- 相关资料14
- 游戏编程的发展14
- 游戏循环14
- 游戏对象14
- 第2 章2D 图形. . . . . . . . . . . . . . . . . . 15
- 2D 渲染基础16
- CRT 显示器基础16
- 像素缓冲区和垂直同步17
- 精灵18
- 绘制精灵18
- 动画精灵20
- 精灵表单23
- 滚屏24
- 单轴滚屏24
- 无限滚屏26
- 平行滚屏27
- 四向滚屏28
- 砖块地图29
- 简单的砖块地图29
- 斜视等视角砖块地图31
- 总结32
- 习题32
- 相关资料33
- Cocos2D 33
- SDL 33
- 第3 章游戏中的线性代数. . . . . . . . . . . . . 34
- 向量35
- 加法36
- 减法37
- 长度、单位向量和正规化38
- 标量乘积39
- 点乘40
- 问题举例:向量反射41
- 叉乘43
- 问题举例:旋转一个2D 角色45
- 线性插值46
- 坐标系47
- 矩阵48
- 加法/减法48
- 标量乘法49
- 乘法49
- 逆矩阵50
- 转置50
- 用矩阵变换3D 向量51
- 总结52
- 习题52
- 相关资料53
- 第4 章3D 图形. . . . . . . . . . . . . . . . . . . . . 54
- 基础55
- 多边形55
- 坐标系55
- 模型坐标系56
- 世界坐标系56
- 视角/摄像机坐标系60
- 投影坐标系62
- 光照与着色64
- 颜色64
- 顶点属性65
- 光照67
- Phong 光照模型68
- 着色70
- 可见性71
- 再探画家算法72
- 深度缓冲区73
- 再探世界变换74
- 四元数75
- 3D 游戏对象的表示77
- 总结77
- 习题77
- 相关资料78
- 第5 章游戏输入. . . . . . .. . . . . . . . . . . 79
- 输入设备80
- 数字输入80
- 模拟输入82
- 基于事件的输入系统84
- 基础事件系统85
- 一个更复杂的系统87
- 移动设备输入89
- 触屏和手势89
- 加速器和陀螺仪91
- 其他移动设备输入92
- 总结92
- 习题92
- 相关资料93
- 第6 章声音. . . . . . . . . . . . . . . . . . 94
- 基本声音95
- 原始数据95
- 声音事件95
- 3D 声音98
- 监听者和发射者98
- 衰减100
- 环绕声100
- 数字信号处理101
- 常见数字信号处理效果102
- 区域标记102
- 其他声音话题103
- 多普勒效应103
- 声音遮挡104
- 总结105
- 目录xiii
- 习题106
- 参考资料106
- 第7 章物理. . . . . . .. . . . . . . 107
- 平面、射线和线段108
- 平面108
- 射线和线段109
- 碰撞几何体110
- 包围球110
- 轴对齐包围盒111
- 朝向包围盒111
- 胶囊体112
- 凸多边形113
- 组合碰撞几何体113
- 碰撞检测113
- 球与球的交叉113
- AABB 与AABB 交叉114
- 线段与平面交叉115
- 线段与三角片交叉117
- 球与平面交叉119
- 球形扫掠体检测120
- 响应碰撞124
- 优化碰撞125
- 基于物理的移动126
- 线性力学概览127
- 可变时间步长带来的问题128
- 力的计算128
- 欧拉和半隐式欧拉积分129
- Verlet 积分法129
- 其他积分方法130
- 角力学130
- 物理中间件130
- 总结131
- 习题131
- 相关资料131
- 第8 章摄像机. . . . . . . . . . . . . . . . 132
- 摄像机的类型133
- 固定摄像机133
- 第一人称摄像机134
- 跟随摄像机134
- 场景切换摄像机135
- 透视投影135
- 视场136
- 宽高比137
- 摄像机的实现138
- 基础的跟随摄像机138
- 弹性跟随摄像机139
- 旋转摄像机142
- 第一人称摄像机144
- 样条摄像机146
- 摄像机支持算法149
- 摄像机碰撞149
- 拣选149
- 总结151
- 习题151
- 相关资料151
- 第9 章人工智能. . . . . . . . . . . . . . . 152
- “真”AI 与游戏AI 153
- 寻路153
- 搜索空间的表示154
- 可接受的启发式算法156
- 贪婪最佳优先算法157
- A* 寻路161
- Dijkstra 算法163
- 基于状态的行为164
- AI 的状态机164
- 基础的状态机实现165
- 状态机设计模式167
- 策略和计划168
- 策略168
- 计划169
- 总结170
- 习题170
- 相关资料172
- 通用AI 172
- 寻路172
- 状态172
- 第10 章用户界面. . . . . . . . . . 173
- 菜单系统174
- 菜单栈174
- 按钮175
- 打字176
- HUD 元素177
- 路点箭头177
- 准心180
- 雷达181
- 其他需要考虑的UI 问题186
- 支持多套分辨率186
- 本地化187
- UI 中间件189
- 用户体验189
- 总结189
- 习题189
- 相关资料190
- 第11 章脚本语言和数据格式. . . . . . . . . . 191
- 脚本语言192
- 折中192
- 脚本语言的类型193
- Lua 194
- UnrealScript 195
- 可视化脚本系统196
- 实现一门脚本语言197
- 标记化197
- 正则表达式198
- 语法分析199
- 代码的执行和生成200
- 数据格式202
- 折中202
- 二进制格式203
- INI 203
- XML 203
- JSON 204
- 案例学习:《魔兽世界》中的UI Mod 205
- 布局和事件205
- 行为206
- 问题:玩家自动操作206
- 问题:UI 兼容性206
- 结论207
- 总结207
- 习题207
- 相关资料208
- 第12 章网络游戏. . . . . . . . . . . . . . . . . . 209
- 协议210
- IP 210
- ICMP 211
- TCP 212
- UDP 214
- 网络拓扑215
- 服务器/客户端216
- 点对点218
- 作弊219
- 信息作弊219
- 游戏状态作弊220
- 中间人攻击220
- 总结221
- 习题221
- 相关资料222
- 第13 章游戏示例:横向滚屏者(iOS) . . . . . . . . . . . . 223
- 概览224
- Objective-C 224
- Cocos2D 225
- 代码分析226
- AppDelegate 226
- MainMenuLayer 227
- GameplayScene 227
- ScrollingLayer 227
- Ship 228
- Projectile 229
- Enemy 229
- ObjectLayer 229
- 练习230
- 总结231
- 第14 章游戏示例:塔防(PC/Mac). . . . . . . . . . . . . 232
- 概览233
- C# 233
- XNA 235
- MonoGame 235
- xviii 目录
- 代码分析236
- 设置236
- 单件236
- 游戏类237
- 游戏状态237
- 游戏对象238
- 关卡239
- 计时器239
- 寻路240
- 摄像机和投影241
- 输入241
- 物理242
- 本地化242
- 图形242
- 声音243
- 用户界面243
- 练习245
- 总结246
- 附录A 习题答案. . . . . . . . . . . . . . . . . . . . . . . 247
- 附录B 对开发者有用的工具. . . . . . . . .. . . . . . . 260