正文

開發(fā)游戲引擎(21)

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


 

4.5.2  檢查設(shè)備的兼容性

盡管使游戲能夠盡可能地適應(yīng)各種不同的設(shè)備是明智之舉,但有時(shí)還是需要為游戲指定一個(gè)最低硬件配置要求。為了能夠簡(jiǎn)化對(duì)運(yùn)行游戲的設(shè)備進(jìn)行性能檢測(cè)的操作,我們?cè)谟螒蛞娴腃GameEngineBase類中添加一些性能檢測(cè)函數(shù)。

使用這些函數(shù),游戲可以指定任何特定的配置。引擎會(huì)對(duì)這些配置一一進(jìn)行驗(yàn)證,以一個(gè)值的形式返回驗(yàn)證結(jié)果,通過(guò)該值就可以知道設(shè)備有哪些配置沒(méi)有滿足。然后可以生成一條信息向用戶解釋為何游戲無(wú)法運(yùn)行。

要檢測(cè)很多項(xiàng)性能,分為以下幾類:

● 屏幕分辨率

● 輸入功能

● Windows Mobile版本

性能檢測(cè)應(yīng)當(dāng)寫成方便以后進(jìn)行擴(kuò)展的形式(事實(shí)上,在后面的章節(jié)中繼續(xù)對(duì)游戲引擎進(jìn)行開發(fā)時(shí),我們還將添加更多的性能檢測(cè)選項(xiàng))。

我們使用一個(gè)枚舉來(lái)標(biāo)識(shí)每個(gè)性能檢查項(xiàng)。每一項(xiàng)的值都為2的冪。這樣,我們只需要在該值上執(zhí)行一次OR按位運(yùn)算,就可以將各個(gè)單獨(dú)的標(biāo)識(shí)值合并為一個(gè)單獨(dú)的值。我們將在該枚舉中應(yīng)用Flags特性,這樣.NET就會(huì)知道我們是通過(guò)這種方式來(lái)使用枚舉的。

該枚舉如程序清單4-24所示。

程序清單4-24  Capabilities 枚舉

/// <summary>

/// Capabilities flags for the CheckCapabilities and 

/// ReportMissingCapabilities functions

/// </summary>

[Flags()]

public enum Capabilities

{

SquareQVGA = 1,

QVGA = 2,

WQVGA = 4,

SquareVGA = 8,

VGA = 16,

WVGA = 32,

TouchScreen = 64,

WindowsMobile2003 = 128,

WindowsMobile5 = 256,

WindowsMobile6 = 512

}

用于檢測(cè)設(shè)備是否滿足這些性能需求的函數(shù)為CheckCapabilities。將所有需要檢驗(yàn)的性能需求編碼后作為參數(shù)傳遞給它,該函數(shù)根據(jù)性能需求對(duì)實(shí)際的設(shè)備硬件進(jìn)行檢驗(yàn)。您可以在CGameEngineBase類源代碼的結(jié)尾處找到該函數(shù)。

該函數(shù)依次檢測(cè)每個(gè)需求,首先是屏幕分辨率,它獲取屏幕的寬度和高度(以像素為單位),并且確保屏幕是豎屏(高度大于寬度)。然后將性能需求中每一個(gè)設(shè)置了分辨率性能標(biāo)志的分辨率與實(shí)際的屏幕大小進(jìn)行對(duì)比,將不能滿足的分辨率性能標(biāo)志記錄到missingCaps變量中。

TouchScreen標(biāo)志只需要簡(jiǎn)單地調(diào)用IsSmartphone函數(shù)來(lái)進(jìn)行檢測(cè)——如果返回true,說(shuō)明不是觸摸屏,就將該標(biāo)志添加到missingCaps變量中。

為了確定Windows Mobile的版本,需要檢測(cè)Environment.OSVersion.Version對(duì)象。它將返回主版本和次版本號(hào)。

使用Version對(duì)象的CompareTo函數(shù),我們可以輕松地驗(yàn)證設(shè)備上運(yùn)行的是哪個(gè)版本的操作系統(tǒng)。同樣,所有不匹配的操作系統(tǒng)版本性能標(biāo)志將被添加到missingCaps變量中,最后將missingCaps返回給函數(shù)調(diào)用過(guò)程。

通過(guò)這種方法對(duì)設(shè)備進(jìn)行檢測(cè),使我們的代碼可以確切地看到哪些性能是不滿足的,但我們需要將這些信息反饋給用戶。這就要用到引擎中的另一個(gè)函數(shù):ReportMissingCapabilities。它可以將這些不滿足的性能轉(zhuǎn)換為一個(gè)可讀的報(bào)告,并呈現(xiàn)在屏幕上。

ReportMissingCapabilities函數(shù)需要另一個(gè)Capabilities參數(shù);這次,它將從CheckCapabilities函數(shù)返回的值作為未滿足的性能。首先找到未滿足的最低分辨率,如果找到了,就將它添加到一個(gè)字符串中(該字符串將被返回)。次低分辨率就不需要顯示了,因?yàn)閷?shí)際上只需要找到要求最低的分辨率即可。

在對(duì)Windows Mobile版本進(jìn)行檢測(cè)時(shí)也采用同樣的方法:只需要指定需求中最低的版本即可。

在檢測(cè)是否為觸摸屏?xí)r也可以用該方法,返回需求字符串。

在游戲中進(jìn)行性能檢測(cè)是通過(guò)在窗體的Load事件中調(diào)用這兩個(gè)函數(shù)來(lái)實(shí)現(xiàn)的。

如果我們發(fā)現(xiàn)一些性能需求不能滿足,就將情況告訴用戶,然后關(guān)閉窗體,退出游戲。例如,程序清單4-25中指定了游戲的性能需求為:VGA及以上分辨率、觸摸屏、以及Windows Mobile 6。


上一章目錄下一章

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