终于等到在网上买的书了,虽然这书时代有点老,但还是觉得还是有价值,应该好好读一读,仔细阅读当然是要做些笔记啦。
学习前的准备工作:
这本书的例子用的是VC++ 6.0+DirectX 7.0,所以先得到网上下载DirectX 7.0
SDK(8.0亦可),解压,把Include 和lib 下的文件全部拷贝到Vc
++的对应目录下,然后,我就试着编译了第一章的一个例子游戏---打砖块的游戏,发现连接不了外部文件!无奈,百度一下,原来还得对编译器做些工作:在Project/Settings /link Object/library 添加
ddraw.lib dxguid.lib 。
第一章 学海无涯
讲解游戏诞生的整个过程,Windows下面的游戏运行整个过程和游戏编程中的规范。
“
一个简化游戏的结构:第一步,初始化
第二步,进入游戏循环
第三步:获得玩家的输入信息
第四步:执行人工智能和游戏逻辑
第五步:渲染下一帧图像
第六步:同步显示
第七步:循环
第八步:关闭 ”
啊哈原来一个游戏程序简单点就是这样运行的,游戏也并不是那么神秘额。
另外的收获就是游戏编程一些规范和技巧:
1.“你不应当在对运行时间或内存要求特别严格的代码段中式用高层API。特别是与游戏内循环有关的代码大多需要手工编写,否则游戏多半会遇到严重的速度和性能的问题。当然,这并不一位着就不能信任DirectX等
API,因为DirectX的设计目的就是兼顾高性能和“thin”原则。但就通常来讲,应当避免频繁调用高层的函数。”----这点是有点不太明白,作者是对API的性能不太信任?还是另有原因,暂且放在这里,等整体看完再研究之。
2.“不要害怕使用全局变量。”“由于参数要被压栈和出栈,执行这个函数体所需时间小于调用函数所需的时间,在这种情况下,更好的方法可以是设立一些全局变量,然后再调用前进行赋值以传递参数”——时间是如此的重要!
3.“使用内联函数”--呵呵,这个上C++课时老师讲啦。虽然使编译后的程序变大了,但却有效的提高运行速度。
4.“尽量使用32位的变量而不是8位或16位变量。”
“struct CPOINT
{
short x,y;
unsigned char c;
} //
end CPOINT”
“注意,定义这个结果看上去不错,但实际并非如此!首先,结构本身是一个5字节长的结构——(2*sizeof(short)+sizeof(char))=5
字节。这太糟了额,由于没注意字节对齐,内存寻址的时候会出大问题。”——这点确实不知道!标记之。
5.“以类似RISC的方式来编程。换句话来说,尽量简化你的代码,而不是是他更复杂。”——以前一直想,能一句完成,就不要写多几行,原来简单句子,执行的更快。“使用二进制移位运算来进行乘数是2的幂的简单整数乘法。”
6.“不要为简单的对象定义太多复杂的数据结构。链表结构很好用,但并不意味着当你所需要的其实是大约有256个固定数组的时候,你也该使用链表”
7.最后有一个小游戏,但是我对里面的碰撞算法,不太理解啊,真是有点难度啊。