当前位置:软件学习 > 其它软件 >>

《Windows游戏编程大师技巧》一、学海无涯

偶然发现了本很棒的游戏编程入门书 - 《Windows游戏编程大师技巧》。说是大师技巧,其实还是很深入浅出的。
它涵盖了Windows图形编程的方方面面,从Win32的Helloworld程序,到GDI简介,再到DirectX的API。很适合我
这种Windows编程的菜鸟,所以很喜欢这本书的内容。

觉得这本书好的另一个原因是:虽然内容丰富,但没有涉及Windows编程比较繁琐的地方,基本就是Win32加DirectX。
这对于不想深入学习COM、MFC等等Windows平台上众多繁杂的技术的人来说很适合。尤其是刚学完C语言,需要一些
练手的小项目。Windows下的C编程与Linux下相比,比较有趣,图形化看起来也比较有成就感。

历史一瞥

早期的PC机落后于家用游戏机,最强大的游戏机统治了游戏市场。
DOOM的出现和成功证明了一点:只要足够聪明,人们可以使PC机做任何事。

在DOOM热的冲击下,微软开始重新评价自己在游戏编程上的地位,它意识到娱乐产业的巨大。
但Win95实时处理视频音频的能力很差,于是微软制作了一个叫Win-G的软件,但失败了。
事实上,它不过是一堆用于画位图的图形调用而已。

随后DirectX诞生了,最初的两个版本有太多糟糕的缺陷,微软低估了视频游戏编程的复杂性。
直到DirectX 5.0发布,人们才从DOS上转到Windows上进行开发。


设计游戏

3D数学很难,但策划和设计一个有趣的游戏可谓同样困难、重要。
想出一个游戏点子并不特别难,关键是细节、最终实现和视觉效果。


游戏的构成

编写MS Word程序虽然难,但是编写Unreal游戏则要比编写我所知道的其他任何程序都要难。 


 

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

 
 
 常规游戏编程指导规范
 
视频游戏是超高性能的计算机程序。不能在对运行时间或内存要求特别严格的代码段中使用高层API。
特别是与游戏内循环有关的代码大都需要手工编写。除此之外,还应留意下列技巧。
 
技巧1 全局变量代替参数传递
 
不要怕使用全局变量,许多视频游戏不让对时间要求严格的函数使用参数,而用全局变量来传递参数。
 
 

[cpp]
void Plot(int x, int y, int color) 

     // plot a pixel on the screen 
     video_buffer[x + y*MEMORY_PITCH] = color; 


由于参数要被压栈、出栈,执行这个函数体的时间小于调用函数的时间。所以可以设立一些全局变量,
在调用前赋值以传递参数。
    
[cpp]
int gx, gy, gz, gcolor;     // define some globals 
 
void Plot_G(void) 

     // plot a pixel using globals 
     video_buffer[gx + gy*MEMORY_PITCH] = gcolor; 

技巧2 内联函数 www.zzzyk.com

使用内联函数inline指示编译器用函数体代码去替换函数调用。这样做会使编译后的程序变大,
但却有效地提高了运行速度。

[cpp]
inline void Plot_I(int x, int y, int color) 

     // plot a pixel on the screen 
     video_buffer[x + y*MEMORY_PITCH] = color; 

技巧3 尽量用32位变量

奔腾处理器是全32位架构的,较小的变量会降低寻址速度。

[cpp]
struct CPOINT 

     short x, y 
     unsigned char c; 

     这个结构没有注意字节对齐,一共5字节。

[cpp]
struct CPOINT 

     int x, y; 
     int c; 

     一共12字节。浪费了许多内存,但换来了速度的提升。

技巧4 使用二进制移位运算

[cpp]
int y_pos = 10; 
// multiply y_pos by 64 
y_pos = (y_pos << 6);     // 2^6 = 64 
// divide y_pos by 8 
y_pos = (y_pos >> 3); 

技巧5 设计算法

设计高效率的算法,没有任何一种汇编语言能使复杂度为O(n²)的算法运行的更快。


开发环境配置

1.安装DirectX运行时。

2. 安装DirectX SDK包。

3. 新建Win32工程,将SDK目录下的Lib文件夹中的库函数和Include文件夹中的头文件导入到工程中。

4. 开始开发!具体编译链接过程如下图所示。 


 \



摘自  西代的小屋 
补充:软件开发 , 其他 ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,