好吧,讓我們重新開始,可能沒有正確地說過事情,(不要判斷我)所以讓我們從頭開始吧。在XNA Game Studio 4.0下,模板被存儲,我選擇了Windows遊戲(4.0)。我將該項目命名爲form
。主類形式
IT負載:
隨着代碼Game1.cs
。現在我右鍵單擊窗體,添加,新建項目,然後選擇窗體。我的名字是Form1.cs
。
現在看起來是這樣的:
我再添加一個按鈕:
如果我要顯示和點擊按鈕我必須做什麼來Game1.cs
去Form1.cs
?
好吧,讓我們重新開始,可能沒有正確地說過事情,(不要判斷我)所以讓我們從頭開始吧。在XNA Game Studio 4.0下,模板被存儲,我選擇了Windows遊戲(4.0)。我將該項目命名爲form
。主類形式
IT負載:
隨着代碼Game1.cs
。現在我右鍵單擊窗體,添加,新建項目,然後選擇窗體。我的名字是Form1.cs
。
現在看起來是這樣的:
我再添加一個按鈕:
如果我要顯示和點擊按鈕我必須做什麼來Game1.cs
去Form1.cs
?
您可以通過多種方式來做到這一點。最明顯的地方來處理,這是在遊戲中的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來代替。這將取決於你對此表單的想法以及你打算如何工作。
我瞭解C#XNA的基本邏輯,感謝您的幫助,我明天會對它進行測試,我無法訪問我的程序以查看它是否正確。 –
謝謝你的幫助J. –
你已經發布了一個新的XNA遊戲沒有添加任何內容的空樣板代碼。你將不得不再次嘗試解釋你正在嘗試做什麼。 XNA遊戲沒有表單 - WinForms項目有表單。您是否在說您正嘗試使用XNA爲WinForms應用程序創建啓動畫面?目前尚不清楚你嘗試過什麼,以及你的問題是什麼。 –
@J ...我很抱歉的解釋,希望我現在已經解決了它的問題。 –
好的!這更清楚了。 –