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