2013-12-13 22 views
0

好吧,讓我們重新開始,可能沒有正確地說過事情,(不要判斷我)所以讓我們從頭開始吧。在XNA Game Studio 4.0下,模板被存儲,我選擇了Windows遊戲(4.0)。我將該項目命名爲form主類形式

IT負載:

The load up of the game

隨着代碼Game1.cs。現在我右鍵單擊窗體,添加,新建項目,然後選擇窗體。我的名字是Form1.cs

現在看起來是這樣的:

After adding the form what the solution bar look like

我再添加一個按鈕:

The form with a button in the middle of it

如果我要顯示和點擊按鈕我必須做什麼來Game1.csForm1.cs

+4

你已經發布了一個新的XNA遊戲沒有添加任何內容的空樣板代碼。你將不得不再次嘗試解釋你正在嘗試做什麼。 XNA遊戲沒有表單 - WinForms項目有表單。您是否在說您正嘗試使用XNA爲WinForms應用程序創建啓動畫面?目前尚不清楚你嘗試過什麼,以及你的問題是什麼。 –

+0

@J ...我很抱歉的解釋,希望我現在已經解決了它的問題。 –

+0

好的!這更清楚了。 –

回答

0

您可以通過多種方式來做到這一點。最明顯的地方來處理,這是在遊戲中的Update方法(注意TODO註釋樣板代碼離開你):

// TODO: Add your update logic here 
if (Keyboard.GetState().IsKeyDown(Keys.F1)) 
{ 
    Form1 form1 = new Form1(); 
    form1.ShowDialog(); 
} 

如果F1已經壓在每個更新和上面的代碼會檢查,如果所以,它會創建並顯示錶單。我在這裏使用了ShowDialog,因爲我猜想這個表單會被用來修改設置等,而且你會希望它保持在最前面。

現在,如果您使用上述代碼,您很快就會發現問題 - XNA遊戲的Update方法不斷被調用。即使快速點擊鍵,最終也會創建幾個新窗口並顯示它們,因此您需要實施一些聯鎖輸入方式。一個簡單的方法做,這是在Game1.cs

private bool isForm1Open = false; 

,然後在Update方法來聲明一個布爾值:

if (Keyboard.GetState().IsKeyDown(Keys.F1) && (!isForm1Open)) 
{ 
    isForm1Open = true; 
    Form1 form1 = new Form1(); 
    form1.FormClosed += new System.Windows.Forms.FormClosedEventHandler(
         (s, e) => { isForm1Open = false; }); 
    form1.ShowDialog(); 
} 

這附加一個匿名事件處理程序form1重置isForm1Open它關閉時。這保證表單只打開一次。在任何情況下,顯示錶單與您通常執行的操作相同 - 創建一個新表單並顯示它。當然,還有其他方法可以解決這個問題 - 您可能希望將Form1作爲單例類來實現,或者也許只是在內存中保留一個副本並使用show/hide來代替。這將取決於你對此表單的想法以及你打算如何工作。

+0

我瞭解C#XNA的基本邏輯,感謝您的幫助,我明天會對它進行測試,我無法訪問我的程序以查看它是否正確。 –

+0

謝謝你的幫助J. –