在XNA的Creator Club中也有類似這個範例的GameStateManagement

不過XNA的那個程式部分有空再來寫XD

今天要跟大家說簡單的

這個選單呢,是網路上已經有人設計好的選單方式GameMenu.dll 這個動態連結檔,是網路上XNA的幕後人員製作的

包含很多功能,增加選項、左右選項等,眼睛看的到的以外

對於選取功能方面,也有相對應的函數可以得知訊息。

執行畫面


針對於DLL的部分,我就不多做說明了

有興趣的話可以到作者的網站上面看看
lukerymarz.blogspot.com/2008/03/new-menu-code.html

因為我覺得他寫的蠻不錯的,所以就直接寫實作的東西囉

這邊就先插一段話囉

可能有些人會覺得很奇怪,為什麼一直用別人寫好的東西來運作,我一開始也覺得,甚麼東西都要自己製作,這樣才是真正的開發作業。

不過,當我上了軟體工程這個課程時候,我才學習到一些事情

對於一個專案的開發,很多公司都是採用購買別人已經完成的程式,加以堆積成自己所需要的規格

這是專案開發的一種方式,所以讓我不再繼續執著於一個dll的內部程式碼。

對我來說應該是有必要的時候,像是遇到問題等的情況,我看看如何解決,現在就是執行單元測試的部分。

將一個大型遊戲計畫,分割成很多小部分個別測試,這在軟體開發的方法論成為throwaway phototyping

這種開發方式對於,不熟悉技術的時候來說非常好用,藉由設計雛形,解決個別的問題,當所有問題解決完畢時,就丟棄模型,執行實作的部分。

運用別人已經開發好的專案,會有部分的風險性,因為你不了解他的程式,但是藉由已經完成的專案,可以加快專案研發速度。

算是物件導向的精神之一,不要動不動就全部重新撰寫,運用些現成的也是很方便的。

好了,廢話結束,接下來進行程式部分

1. 先加入參考,加入GameMenu.dll


2. 使用命名空間
using GameMenu;

增加Menu類別Menu mainMenu;
同時也要增加一個控制的方式KeyboardState prevKeyBoardState;

LoadContent()中
mainMenu = new GameMenu.Menu(this);
實作選單類別
選單類別裡面有一些方便的方法
AddChoice("名字") 增加選項
AddLeftRightChoices("字串陣列");  橫排的選項
程式碼
mainMenu.AddChoice("Choice One");
MenuChoice choice = mainMenu.AddChoice("Right Left Choice");
choice.AddLeftRightChoices(new string[] {"One","Two","Three"});
choice = mainMenu.AddChoice("Sub Menu");
choice.AddChoice("Sub choice 1");
choice.AddChoice("Sub choice 2");
MenuChoice choice1 = mainMenu.AddChoice("Sub Menu2");
choice1.AddLeftRightChoices(new string[] { "test1", "test2" });
以上程式碼,是建立選單的樣式
結構為
Choic One
Right Left Choice | One Two Three
Sub Menu
   ├Sub choice 1
   └Sub choice 2
Sub Menu | test1 test2

上面結束後再來設定,Handler,也就是所謂的event Handler
mainMenu.ChoiceExecuted += new Menu.ChoiceExecutedHandler(ChoiceExecuted); 當被執行以後會做甚麼事情
mainMenu.ChoiceSelected += new Menu.ChoiceSelectedHandler(ChoiceSelected);
mainMenu.ChoiceDeselected += new Menu.ChoiceDeselectedHandler(ChoiceDeselected);
以上就是LoadContent中的程式碼

在來針對Handler來撰寫他的功能
public void ChoiceExecuted(object source, Menu.MenuEvent e)
{
    Console.WriteLine("Executed: " + e.choiceString);
    if (e.choiceString == "Return")
        mainMenu.visible = false;
}
Handler這邊只舉例一個,這個Handler可以在Console模式看到訊息

接下來在Update中
KeyboardState keyboardState = Keyboard.GetState();   取得鍵盤目前的資訊
當按下ESC,就跳出選單
if (keyboardState.IsKeyDown(Keys.Escape) && !prevKeyBoardState.IsKeyDown(Keys.Escape))
{
mainMenu.visible = !mainMenu.visible;
}

mainMenu.Update(gameTime);更新選單
prevKeyBoardState = keyboardState;  儲存鍵盤狀態

接下來進行到DRAW部分
mainMenu.Draw(gameTime);
就是將選單畫出

藉由以上輕鬆的方式,就可以輕鬆建立一個選單

你在製作遊戲的時候,可以輕鬆使用唷~
創作者介紹
創作者 teexit1224 的頭像
teexit1224

StreamWhite

teexit1224 發表在 痞客邦 留言(0) 人氣()