正文

GDI圖形編程(1)

Windows移動(dòng)游戲開發(fā)實(shí)戰(zhàn) 作者:(美)Adam Dawes


 

現(xiàn)在是時(shí)候利用目前所學(xué)到的知識(shí)來編寫一個(gè)游戲了。在接下來的幾章中,我們將先構(gòu)建一個(gè)直觀并且易用的游戲框架,然后再利用這個(gè)框架創(chuàng)建自己的作品。該框架會(huì)考慮到目前為止我們所發(fā)現(xiàn)的各種問題及設(shè)備的多樣性,將這些細(xì)節(jié)問題盡可能地解決,掃除我們的后顧之憂。 

在本章中,我們將學(xué)習(xí)圖形設(shè)備接口(Graphics Device Interface,GDI),它是Windows Mobile中的基本圖形技術(shù)之一。

3.1  GDI概述

我們首先要清楚:GDI不是一個(gè)高性能圖形接口。我們也不會(huì)用它來創(chuàng)建快速移動(dòng)的3D游戲(3D游戲的詳細(xì)情況將在后面講解OpenGL ES時(shí)進(jìn)行介紹)。但在此提到它并非是在浪費(fèi)時(shí)間。因?yàn)閷?duì)于很多游戲和游戲形式而言,GDI足以完美地解決問題,并且非常適合。它的使用很簡(jiǎn)單,并且在各種版本的Windows Mobile中都能夠得到支持,幾乎在所有的設(shè)備上都表現(xiàn)出了很好的性能。

長(zhǎng)期以來,移動(dòng)設(shè)備在性能與功能上明顯落后于臺(tái)式PC。臺(tái)式計(jì)算機(jī)承擔(dān)了主要的3D變革,即使很便宜的顯卡都具有強(qiáng)大的性能。而移動(dòng)設(shè)備不論在電源消耗上,還是在設(shè)備尺寸上,都仍然受到局限。像DirectX和OpenGL這樣的API能夠提供一系列強(qiáng)大靈活的功能。很多設(shè)備不能處理這些技術(shù)所需的復(fù)雜操作。相比之下,雖然GDI提供的功能很簡(jiǎn)單,但它們?cè)谂f硬件和新硬件上都能很好地工作,只需要稍加努力,就可以編寫出既好玩又吸引人的游戲。

GDI是一套能執(zhí)行簡(jiǎn)單的圖形操作的類與函數(shù)。Windows Mobile操作系統(tǒng)本身在很多自帶的顯示功能上都使用了GDI。

在下面的章節(jié)中,我們將討論如何使用GDI并介紹它為游戲開發(fā)人員提供了哪些功能。

3.2  開始繪圖 

我們的圖形編程將以Form類的Paint事件為起點(diǎn),每當(dāng)窗體(或窗體的某一部分)需要重繪時(shí)就會(huì)調(diào)用Paint事件。在該事件中,可以向窗口中繪制我們所需要的任何內(nèi)容,并可以確保只要我們的窗體可見,這些圖像都會(huì)持久顯示。

Paint事件的調(diào)用包含兩個(gè)參數(shù),如下所示。

private void Form1_Paint(object sender, PaintEventArgs e)

{

}

與所有標(biāo)準(zhǔn)的.NET事件一樣,sender對(duì)象提供了對(duì)調(diào)用該事件的引用(在本例中該對(duì)象為需要繪圖的窗體)。第二個(gè)參數(shù)類型為PaintEventArgs,它是我們將圖形顯示到屏幕上的渠道。它包含了一個(gè)名為Graphics的屬性(其類名也叫Graphics),通過該對(duì)象就可以使用GDI提供的所有繪圖函數(shù)與屬性。

我們首先來看一個(gè)簡(jiǎn)單的例子,該示例在窗體中繪制了一些線段(參見程序清單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);

}


上一章目錄下一章

Copyright ? 讀書網(wǎng) www.afriseller.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號(hào) 鄂公網(wǎng)安備 42010302001612號(hào)