Platformer和“馬里奧”的非常類似,玩法基本上差不多,只是遊戲目前很多功能暫未實現。Platformer的主要目前就是要控制英雄躲開遊戲中的所有殭屍怪,我們要在這些殭屍的幹擾下用最短的時間收集寶石。每個關卡所花費的時間越短、收集的寶石越多,那麼你在遊戲中的成績越高。唯一遺憾的是Platformer沒有美女等待我們的拯救,但是無所謂,我們可以在後續開發過程中DIY一個。
Platformer聽起來似乎簡單的不能再簡單,但是所謂金字塔不是一天建成的。Platformer麻雀雖小,但是五髒俱全。因為我們在遊戲開發中的大部分技能都在這個遊戲中得到了體現,動畫處理、聲音載入、觸控、鍵盤的輸入、碰撞檢測、遊戲地圖解析等是應有盡有。
Platformer的主要特性這裡歸納如下:
- 支援Windows Phone 7、XBOX 360、PC的跨平台,遊戲無需任何的代碼修改就可以無縫在三者間運行。
- 支援鍵盤、遊戲搖杆控制遊戲主角的移動和跳動,此外在Windows Phone 7平台上則是使用加速度感應器和觸控螢幕來控制主角的移動和“上蹦下跳”。
- 實現了下降和跳躍、動態碰撞等幾種簡單的情境模型,初步實現了真正情境的防真。
- 實現了對音頻、動畫圖片、地圖資源的載入和解析
- 實現了高解析度和低分辨的自動轉換,遊戲畫面可以適應不同螢幕大小的裝置。
目前微軟給這款遊戲添加了不少伏筆,只待各位進一步挖掘和完善。軒轅就發現在Platformer中殭屍怪也不是無敵金身,只要額外添加一些代碼,英雄就可以在收集到一定量的寶石後即可啟動無敵變身狀態,真可謂是“遇佛殺佛,見鬼收鬼”。至於更變態的實現還是期待各位讀者自己豐衣足食,這裡就不複讀機了。
Platformer遊戲由十數個類組成。各個功能類之間沒有牽涉到繼承等關係,因此可以說每個類都具備自己獨立的功能。軒轅會在後續的開發中對代碼進一步完善,使遊戲的擴充性更強,比如說情境滾動效果就會在後續課程中完成。下面是Platformer的對象解析圖:
現在對Platformer中的13個類的中心思想分別概述下:
1:PlatformerGame類,它是整個遊戲的控制中心,除了告知遊戲中所有的對象什麼時候響應和顯示外,還負責內容管道和關卡的載入,以及遊戲中各種對象的更新。可謂是勞苦功高
2:Level類 ,它是遊戲的關卡類。每個關卡對象包含了一個用於存放情境瓷磚資訊的多維陣列,英雄、遊戲開始和結束位置的座標、總分數、遊戲剩餘時間、一系列寶石和殭屍怪的資訊。
3:Player類用於實現英雄的載入、繪製和更新操作。
4:Enemy類,負責殭屍怪的載入、繪製和更新操作。
5:Gem類在遊戲中實現一個懸浮在空中的寶石,不同類型的寶石所含的分值也不相同。英雄的主要任務就是收集這些寶石。有關寶石的載入、繪製和更新也由Gem類負責。
6:Tile 結構。Tile如同我們現實中的瓷磚一樣,我們可以在每個Tile中包含一個遊戲元素,這樣就可以拼接成我們期望的遊戲情境。在Platformer遊戲中我們用這些Tile構成形成關卡的情境圖。
7:Animation類,望文生義,當然是遊戲候中不可或缺的動畫類,它主要是解析遊戲中包含的眾多Sprites(精靈)圖片,以實現動畫的幀分解。
8: AnimationPlayer類實現了將Animation類定義的精靈圖片中的每一幀形成連貫的動畫。
9:Circle類專門只用於Gem類的,它定義了一個包圍Gem的圓,以實現主角和寶石的碰撞檢測。
10:RectangleExtension累是Rectangle的一個擴充靜態類,同樣由於碰撞檢測。
11:Program是所有XNA項目的啟動類,也是程式的入口。
12:TouchCollectionExtensions類是針對WP7的觸控螢幕輸入而實現的一個擴充類,以檢測觸控螢幕是否存在觸點。
13:Accelerometer類對WP7中的加速度感應器做了封裝,左右傾斜手機可以實現主角向左或向右的移動。
遊戲執行流程:
在還未開始編程之前,先來概要說明下遊戲的執行流程。
1 在開始一個新關卡時,將載入該關卡需要的所有資源,這一切可以由PlatformerGame.LoadContent 和 PlatformerGame.LoadNextLevel這兩個方法實現。
2 每次遊戲的狀態更新過程都由PlatformerGame.Update 和 Level.Update兩個方法實現。如果英雄已經死亡,或者關卡時間耗盡,那麼任何輸入都將無視,遊戲處於一個暫停狀態。如果玩家到達出口,剩餘的時間將轉化為該關卡的成績加成。如果時間還有剩餘,並且英雄沒有到達出口的話,那麼時間將逐漸減少,關卡情境中的各種對象(英雄、殭屍怪、寶石)將使用Update方法進行更新操作。各種狀態都需要在編程之前考慮好,這樣在以後的實現中才不至於將項目推到重來。
3 遊戲整體畫面由PlatformerGame.Draw方法進行繪製,事實上,真正的繪製過程被細分,情境中的每個對象都按照自己的進度實現繪製。比如說,PlatformerGame.Draw被細分為Level.Draw 和 PlatformerGame.DrawHud兩個方法。Level.Draw只是負責情境中Tile瓷片的繪製,英雄、殭屍怪、寶石本身是包含了一個Draw繪製方法的。總而言之,PlatformerGame.Draw只是起到調度和總控的作用,下面則一級級地聽從調度,以完成“領導”安排的的工作。可謂是“牽一髮而動全身”。