Windows游戏编程大师技巧第二版学习笔记之第一章

Win32编程
DirectX基础知识
2D图形和算法
游戏编程技术和数据结构
多线程编程
人工智能
物理建模
使用3D加速硬件设备

计算机程序是由逻辑和数学组成。而3D视频游戏很强调数学部分
3D图形学里的内容几乎全部涉及数学。只要了解一些基本的代数和几何知识就可以了。

第一部分 Windows 编程基础
1.学海无涯
2.Windows 编程模型
3.高级Windows编程
4.Windows GDI,控件和突发奇想
第二部分 DirectX和2D基础
5.DirectX基础和令人生畏的COM
6.初次邂逅DirectDraw
7.高级DirectDraw和位图图形
8.矢量光栅化及2D变换
9.DirectInput输入和力反馈
10.用DirectSound和DirectMusic演奏乐曲
第三部分 核心游戏编程
11.算法,数据结构,内存管理和多线程
12.人工智能
13.基本物理建模
14.文字时代
15.综合运用
第四部分 附录
A.光盘内容简介
B.安装DirectX和使用C/C++编译器
C.数学和三角学回顾
D.C++入门
E.游戏编程资源
F.ASCII码表

Windows游戏开发的各个方面
游戏的历史
游戏类型
游戏编程要素
使用工具
例子:FreakOut

游戏的构成
一个视频游戏基本上是一个连续的循环,它完成逻辑动作并以30帧/秒或更高的刷新率在屏幕上绘制图像。

第一步:初始化
在这一步中,游戏程序执行标准初始化操作,如内存分配,资源采集,从磁盘装入数据等等。
第二步:进入游戏循环
在这一步中,代码运行到游戏主循环体内部,此时各种操作开始运行,运行持续到用户推出主循环为止。
第三步:获得玩家的输入信息
在这一步,游戏玩家的输入信息被处理或缓存,以备下一步人工智能和游戏逻辑使用。
第四步:执行人工智能和游戏逻辑
这一部分包括游戏代码的主题部分,诸如执行人工智能,物理系统和一般游戏逻辑,其结果用于渲染下一帧图像。
第五步:渲染下一帧图像
在这一步中,玩家的输入和第四步中游戏人工智能和游戏逻辑执行的结果,被用来产生游戏的下一帧动画,这个图像通常放在不可见的缓冲区内,因此玩家不会看到它逐渐被渲染的过程,随后该图像被迅速拷贝到显示存储器中并显示出来。
第六步:同步显示
通常由于游戏复杂程度的不同,游戏在计算机上运行的速度会时快时慢。比如,如果屏幕上有1000个物体在动作,CPU的负载就比只有10个对象时重的多,从而游戏等 画面刷新率也会时高时低,而这时难以接受的,因此必须把游戏按照某个最大帧速率进行同步,并使用定时功能或等待函数来维持同步,一般来讲能达到30帧/秒的帧速率就非常好了。
第七步:循环
这一步非常简单,只需返回游戏循环的入口并重新执行上述全部步骤。
第八步:关闭
这一步是游戏的结束,表示将退出主程序或游戏循环,并返回到操作系统。然而在用户进行结束之前,用户必须释放所有的资源并清理系统,这些释放操作对任何其他软件也是同样要做的。

大多数情况下,游戏循环是一个含有大量状态的FSM,有限状态自动机。

提高速度的一些技巧
技巧一:使用全局变量
缺点:貌似很容易制作外挂

技巧二:使用内联函数
缺点:编译后生成的程序更大

技巧三:尽量使用32位变量而不是8位或16位
缺点:会浪费一些内存

技巧四:使用精简指令
例如:
if ((x+=(2*buffer[index++]))>10)
{
// do work
} // end if
更好的做法:
x+=(2*buffer[index]);
index++;
if (x > 10)
{
// do work
} // end if

技巧五:
使用二进制以为运算进行乘数是2的幂的简单证书乘法。因为所有的数据在计算机中都以二进制存储,把一组位元向左或向右移动就分别等价于乘法和除法运算
int y_pos = 10;
// multiply y_pos by 64
y_pos = (y_pos << 6);  // 2^6 = 64
相似的有:
// to divide y_pos by 8
y_pos = (y_pos >> 3); // 1/2^3 = 1/8

技巧六:
使用高效的算法而不是汇编。

技巧七:
不要在编程中优化代码。

技巧八:
不要为简单的对象定义太多复杂的数据结构和链表

技巧九:
使用C++应谨慎,不要疯狂写过多的class

技巧十:
如果方法不对,应该立即停止去利用其它方法

技巧十一:
经常备份

技巧十二:
合理组织工程文件。

你可能感兴趣的:(Game,C++,游戏,编程,windows,数据结构,多线程,图形)