第1章 游戏编程概述
游戏编程的发展
世界上第一款商业游戏Computer Space在1971年推出.是后来Atari的创办人Nolan Bushnell 和 Ted Dabney 开发的.这款游戏当时并不是运行在传统计算机上的.它的硬件甚至没有处理器和内存.它只是一个简单的状态机,在多个状态中转换.Computer Space的所有逻辑必须在硬件上完成.
随着"Atari 2600"在1977年推出,开发者们有了一个开发游戏的平台.这正是游戏开发变得更加软件化的时候,再也不用设计复杂的硬件了.从Atari时期一直到现在,仍然有一些游戏技术保留着
家用机推出的时候,它的硬件就会被锁定5年多,称为一个"世代".家用机的优点也在于其锁定了硬件,使得程序员可以有效利用机能.
Atari时期(1977-1985年)
这个时期的程序员需要对底层硬件有一定的理解.CPU运行在1.1MHz,内存只有128字节.这些限制使得用C语言开发不太实际.大多数游戏都是完全用汇编语言开发的. 更糟糕的是,调试是完全看个人能力的.没有任何开发工具和SDK.
NES和SNES时期(1985-1995年)
然而到了1983年,北美游戏市场崩溃了.主要原因在于,市场上充斥着大量质量低下的游戏.
直到1985年推出的红白机(NES)才把产业带回正轨.
到了超级任天堂(SNES)时代,开发团队进一步扩大.随着开发团队的扩大,不可避免地会变得更加专业化.
NES和SNES的游戏仍然完全用汇编语言开发,因为内存依然不足.幸运的是任天堂有提供SDK和开发工具,开发者不再像Atari时期那么痛苦.
PS和PS2时期(1995-2005年)
Xbox360,PS3和Wii时期(2005-2013年)
游戏的未来
尽管游戏开发多年来有许多变迁,有趣的是,许多早期概念到现在仍然适用,20年都没变的核心概念的基础部分: 游戏循环, 游戏时间管理和游戏对象模型
游戏循环
整个游戏程序的核心流程控制称为游戏循环.之所以是一个循环,是因为游戏总是不断地执行一系列动作直到玩家退出.每迭代一次游戏循环称为1帧.大部分实时游戏每秒钟更新30~60帧.如果一个游戏跑60FPS(帧/秒),那么这个游戏循环每秒要执行60次.
游戏开发中有着各种各样的游戏循环,选择上需要考虑许多因素,其中以硬件因素为主
传统的游戏循环
多线程下的游戏循环
时间和游戏
真实时间和游戏时间
通过处理时间增量来表示游戏逻辑
游戏对象
游戏对象的模型
游戏循环中的游戏对象
相关资料
游戏编程的发展
游戏循环
游戏对象
第2章 2D图形
2D渲染基础
CRT显示器基础
像素缓冲区和垂直同步
精灵
绘制精灵
动画精灵
精灵表单
滚屏
单轴滚屏
无限滚屏
平行滚屏
四向滚屏
砖块地图
简单的砖块地图
斜视等视角砖块地图
相关资料
Cocos2D
SDL
第3章 游戏中的线性代数
向量
加法
减法
长度,单位向量和正规化
标量乘积
点乘
问题举例:向量反射
叉乘
问题举例:旋转一个2D角色
线性插值
坐标系
矩阵
加法/减法
标量乘法
乘法
逆矩阵
转置
用矩阵变换3D向量
相关资料
第4章 3D图形
基础
多边形
坐标系
模型坐标系
世界坐标系
视角/摄像机坐标系
投影坐标系
光照与着色
颜色
顶点属性
光照
Phong光照模型
着色
可见性
再探画家算法
深度缓冲区
再探世界变换
四元数
3D游戏对象的表示
相关资料
第5章 游戏输入
输入设备
数字输入
模拟输入
基于事件的输入系统
基础事件系统
一个更复杂的系统
移动设备输入
触屏和手势
加速器和陀螺仪
其他移动设备输入
相关资料
第6章 声音
基本声音
原始数据
声音事件
3D声音
监听者和发射者
衰减
环绕声
数字信号处理
常见数字信号处理效果
区域标记
其他声音话题
多普勒效应
声音遮挡
相关资料
第7章 物理
平面,射线和线段
平面
射线和线段
碰撞几何体
包围球
轴对齐包围盒
朝向包围盒
胶囊体
凸多边形
组合碰撞集合体
碰撞检测
球与球的交叉
AABB与AABB交叉
线段与平面交叉
线段与三角片交叉
球与平面交叉
球形扫掠体检测
响应碰撞
优化碰撞
基于物理的移动
线性力学概览
可变时间步长带来的问题
力的计算
欧拉和半隐式欧拉积分
Verlet积分法
其他积分方法
角力学
相关资料
第8章 摄像机
摄像机的类型
固定摄像机
第一人称摄像机
跟随摄像机
场景切换摄像机
透视投影
视场
宽高比
摄像机的实现
基础的跟随摄像机
弹性跟随摄像机
旋转摄像机
第一人称摄像机
样条摄像机
摄像机支持算法
摄像机碰撞
拣选
相关资料
第9章 人工智能
"真"AI与游戏AI
寻路
探索空间的表示
可接受的启发式算法
贪婪最佳优先算法
A*寻路
Dijkstra算法
基于状态的行为
AI的状态机
基础的状态机实现
状态机设计模式
策略和计划
策略
计划
相关资料
通用AI
寻路
状态
第10章 用户界面
菜单系统
菜单栈
按钮
打字
HUD元素
路点箭头
准心
雷达
其他需要考虑的UI问题
支持多套分辨率
本地化
UI中间件
用户体验
相关资料
第11章 脚本语言和数据格式
脚本语言
折中
脚本语言的类型
Lua
UnrealScript
可视化脚本系统
实现一门脚本语言
标记化
正则表达式
语法分析
代码的执行和生成
数据格式
折中
二进制格式
INI
XML
JSON
案例学习:<<魔兽世界>>中的UI Mod
布局和事件
行为
问题:玩家自动操作
问题:UI兼容性
结论
相关资料
第12章 网络游戏
协议
IP
ICMP
TCP
UPD
网络拓扑
服务器/客户端
点对点
作弊
信息作弊
游戏状态作弊
中间人攻击
相关资料
第13章 游戏示例:横向滚屏者(iOS)
概览
Objective-C
Cocos2D
代码分析
AppDelegate
MainMenuLayer
GameplayScene
ScrollingLayer
Ship
Projectile
Enemy
ObjectLayer
第14章 游戏示例:塔防(PC/Mac)
概览
C#
XNA
MonoGame
代码分析
设置
单件
游戏类
游戏状态
游戏对象
关卡
计时器
寻路
摄像机和投影
输入
物理
本地化
图形
声音
用户界面