Let's create XNA Game!
在XNA的Creator Club中也有類似這個範例的GameStateManagement不過XNA的那個程式部分有空再來寫XD今天要跟大家說簡單的這個選單呢,是網路上已經有人設計好的選單方式GameMenu.dll 這個動態連結檔,是網路上XNA的幕後人員製作的包含很多功能,增加選項、左右選項等,眼睛看的到的以外對於選取功能方面,也有相對應的函數可以得知訊息。執行畫面針對於DLL的部分,我就不多做說明了有興趣的話可以到作者的網站上面看看lukerymarz.blogspot.com/2008/03/new-menu-code.html因為我覺得他寫的蠻不錯的,所以就直接寫實作的東西囉這邊就先插一段話囉可能有些人會覺得很奇怪,為什麼一直用別人寫好的東西來運作,我一開始也覺得,甚麼東西都要自己製作,這樣才是真正的開發作業。不過,當我上了軟體工程這個課程時候,我才學習到一些事情對於一個專案的開發,很多公司都是採用購買別人已經完成的程式,加以堆積成自己所需要的規格這是專案開發的一種方式,所以讓我不再繼續執著於一個dll的內部程式碼。對我來說應該是有必要的時候,像是遇到問題等的情況,我看看如何解決,現在就是執行單元測試的部分。將一個大型遊戲計畫,分割成很多小部分個別測試,這在軟體開發的方法論成為throwaway phototyping這種開發方式對於,不熟悉技術的時候來說非常好用,藉由設計雛形,解決個別的問題,當所有問題解決完畢時,就丟棄模型,執行實作的部分。運用別人已經開發好的專案,會有部分的風險性,因為你不了解他的程式,但是藉由已經完成的專案,可以加快專案研發速度。算是物件導向的精神之一,不要動不動就全部重新撰寫,運用些現成的也是很方便的。好了,廢話結束,接下來進行程式部分1. 先加入參考,加入GameMenu.dll2. 使用命名空間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 OneRight Left Choice | One Two ThreeSub Menu ├Sub choice 1 └Sub choice 2Sub Menu | test1 test2上面結束後再來設定,Handler,也就是所謂的event HandlermainMenu.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);就是將選單畫出藉由以上輕鬆的方式,就可以輕鬆建立一個選單你在製作遊戲的時候,可以輕鬆使用唷~
DotBlogs Tags: XNA posted on 2008/12/5 21:31 | 我要推薦 | 閱讀數 : 2015 | 分類[ XNA ] 訂閱
Copyright © 獃獃