GDI图形编程(1)

 

现在是时候利用目前所学到的知识来编写一个游戏了。在接下来的几章中,我们将先构建一个直观并且易用的游戏框架,然后再利用这个框架创建自己的作品。该框架会考虑到目前为止我们所发现的各种问题及设备的多样性,将这些细节问题尽可能地解决,扫除我们的后顾之忧。 

在本章中,我们将学习图形设备接口(Graphics Device Interface,GDI),它是Windows Mobile中的基本图形技术之一。

3.1  GDI概述

我们首先要清楚:GDI不是一个高性能图形接口。我们也不会用它来创建快速移动的3D游戏(3D游戏的详细情况将在后面讲解OpenGL ES时进行介绍)。但在此提到它并非是在浪费时间。因为对于很多游戏和游戏形式而言,GDI足以完美地解决问题,并且非常适合。它的使用很简单,并且在各种版本的Windows Mobile中都能够得到支持,几乎在所有的设备上都表现出了很好的性能。

长期以来,移动设备在性能与功能上明显落后于台式PC。台式计算机承担了主要的3D变革,即使很便宜的显卡都具有强大的性能。而移动设备不论在电源消耗上,还是在设备尺寸上,都仍然受到局限。像DirectX和OpenGL这样的API能够提供一系列强大灵活的功能。很多设备不能处理这些技术所需的复杂操作。相比之下,虽然GDI提供的功能很简单,但它们在旧硬件和新硬件上都能很好地工作,只需要稍加努力,就可以编写出既好玩又吸引人的游戏。

GDI是一套能执行简单的图形操作的类与函数。Windows Mobile操作系统本身在很多自带的显示功能上都使用了GDI。

在下面的章节中,我们将讨论如何使用GDI并介绍它为游戏开发人员提供了哪些功能。

3.2  开始绘图 

我们的图形编程将以Form类的Paint事件为起点,每当窗体(或窗体的某一部分)需要重绘时就会调用Paint事件。在该事件中,可以向窗口中绘制我们所需要的任何内容,并可以确保只要我们的窗体可见,这些图像都会持久显示。

Paint事件的调用包含两个参数,如下所示。

private void Form1_Paint(object sender, PaintEventArgs e)

{

}

与所有标准的.NET事件一样,sender对象提供了对调用该事件的引用(在本例中该对象为需要绘图的窗体)。第二个参数类型为PaintEventArgs,它是我们将图形显示到屏幕上的渠道。它包含了一个名为Graphics的属性(其类名也叫Graphics),通过该对象就可以使用GDI提供的所有绘图函数与属性。

我们首先来看一个简单的例子,该示例在窗体中绘制了一些线段(参见程序清单3-1)。

程序清单3-1  在窗体中绘制线段

private void Form1_Paint(object sender, PaintEventArgs e)

{

// Create a black pen

using (Pen myPen = new Pen(Color.Black))

{

// Draw a line from the top left (0, 0) to the bottom right

// (Width, Height) of the form

e.Graphics.DrawLine(myPen, 0, 0, this.Width, this.Height);

// Draw a line from the top right (Width, 0) to the bottom left

// (0, Height) of the form

e.Graphics.DrawLine(myPen, this.Width,0, 0, this.Height);

}

读书导航