8.1.3 選擇音效
在游戲中執(zhí)行下列操作時(shí)需要提供音效:
● 當(dāng)一對(duì)新的寶石出現(xiàn)在游戲區(qū)域的頂部時(shí)。
● 當(dāng)形成了一組寶石并被消除時(shí)。每當(dāng)可以一次性消除多組寶石時(shí),每消除一組新
的寶石就使用漸高的音效,表示這樣可以得到更多的分值。漸高的音調(diào)也會(huì)使玩家對(duì)他的游戲成果感到愉悅。
● 當(dāng)彩虹寶石落地時(shí)。
● 當(dāng)游戲結(jié)束時(shí)。
除了音效之外,我們還將提供背景音樂,所有的游戲音頻都將使用BASS來提供。
8.1.4 游戲的最低配置
該游戲?qū)⒉辉O(shè)任何最低系統(tǒng)要求,從QVGA屏幕到WVGA屏幕,以及采用Windows Mobile 2003 SE以上的手機(jī)都適用。
我們要提供兩種不同的圖形集,一種用于較低分辨率的屏幕(QVGA);另一種用于較高分辨率的屏幕(VGA)。游戲會(huì)自動(dòng)檢測(cè)屏幕的分辨率而選擇使用哪套圖形集。如果游戲在VGA屏幕上采用橫屏模式,那么它也將采用小圖形集合。
當(dāng)屏幕的垂直高度大于其寬度時(shí),我們將使用屏幕的高度來判斷顯示哪套圖形集。在運(yùn)行Windows Mobile 6的QVGA屏幕上,游戲窗體的高度為268像素,由游戲的ClientSize.Height屬性返回。由于需要在該區(qū)域中顯示15行,所以將268除以15,結(jié)果為每行占17.86像素。但是,還要為分值的顯示、游戲區(qū)域的邊框等留出一點(diǎn)位置,所以我們將每行所占的空間設(shè)置為16像素。因此小寶石圖形高度應(yīng)該為16像素。
對(duì)于較大的大圖形,VGA屏幕的ClientSize.Height屬性返回536,除以15得到每行的高度為35.73像素。為了簡(jiǎn)化創(chuàng)建圖形的工作,我們將它的高度降低為32像素,正好是小圖形高度的2倍。
為了選擇使用哪套圖形集,只需要看屏幕的高度是否小于480像素。如果是,則要么是運(yùn)行于QVGA模式的豎屏手機(jī),要么是VGA模式的橫屏手機(jī)。如果屏幕高度是480像素或更大,那就有足夠的空間來使用大圖形集。
我們可以通過Screen.PrimaryScreen.Bounds.Height屬性來判斷屏幕的大小。它返回的是屏幕的實(shí)際高度,包含了通知欄及菜單欄所占用的空間。如果屏幕在豎屏和橫屏之間進(jìn)行切換,該屬性值會(huì)進(jìn)行更新來返回新的屏幕高度。
8.2 編寫游戲
游戲設(shè)計(jì)方案已經(jīng)完成了,接下來我們開始編寫代碼。該游戲完整的源代碼包含在本書配套下載代碼GemDrops項(xiàng)目中,您可以在Visual Studio中打開該項(xiàng)目查看這里所介紹的任何代碼上的細(xì)節(jié)。本節(jié)主要介紹GemDrops游戲是如何創(chuàng)建的。
構(gòu)建一個(gè)完整的游戲就會(huì)涉及大量的對(duì)同一個(gè)代碼片段的迭代修改。因此,我們需要逐步來構(gòu)建該項(xiàng)目。當(dāng)我們查看游戲中的每一段代碼時(shí),您可能會(huì)注意到完成了的代碼中包含了一些我們開始時(shí)沒有提到的額外功能。我們會(huì)回過頭來看整個(gè)過程中每一個(gè)要點(diǎn),所以當(dāng)您看到它們時(shí)不要擔(dān)心我們會(huì)將它們忽略掉。
在接下來的各節(jié)描述中我不準(zhǔn)備手把手地指導(dǎo)您如何重新創(chuàng)建該項(xiàng)目,所以不要遵循這些內(nèi)容來從頭構(gòu)建游戲。但它們?cè)敿?xì)地闡明了創(chuàng)建游戲時(shí)所要經(jīng)歷的一些過程,并引導(dǎo)您縱覽各個(gè)步驟,而這些都是在創(chuàng)建自己的游戲時(shí)所需要的。在接下來的各個(gè)部分中沒有絕對(duì)地包含所有的游戲代碼,因?yàn)槠渲杏泻芏啻a您已經(jīng)在前面的章節(jié)中看到過了。我們會(huì)將焦點(diǎn)放在游戲中所有重要的組件上,并介紹如何將它們構(gòu)造成一個(gè)最終的游戲。
8.2.1 創(chuàng)建項(xiàng)目
首先,創(chuàng)建一個(gè)名為GemDrops的Windows移動(dòng)應(yīng)用程序項(xiàng)目。在Visual Studio中保持該項(xiàng)目為打開狀態(tài),然后將游戲引擎項(xiàng)目添加到解決方案中,并為GemDrops添加對(duì)游戲引擎的引用。
在開始時(shí),GemDrops項(xiàng)目只包含一個(gè)默認(rèn)窗體Form1。我們需要為項(xiàng)目添加一些新類:一個(gè)代表顯示在屏幕上的寶石的游戲?qū)ο箢惡鸵粋€(gè)代表游戲本身的游戲?qū)ο箢悺R虼?,要在?xiàng)目中添加兩個(gè)類:一個(gè)是CObjGem類,它繼承自GameEngine.CGameObjectGDIBase類;另一個(gè)是CGemDropsGame類,它繼承自GameEngine.CGameEngine.GDIBase類。
我們將在接下來的各節(jié)中介紹這些類,并為它們添加代碼,現(xiàn)在讓它們暫時(shí)為空。