2013-05-15 32 views

回答

4

您可以創建一個方法:

//Inside of game1.cs 
public void Quit() 
{ 
    this.Exit() 
} 

我假設你想退出遊戲在菜單組件上,在這種情況下,您需要將game1的實例傳遞給組件,或許將其作爲參數添加到菜單組件更新方法中。

public void Update(GameTime gameTime, Game1 game) 
{ 
    if(key is pressed) 
    { 
      game.Quit(); 
    } 
} 

我不知道是否有任何其他的方式......也許尋找一種方法來「強制」關閉按鈕按下。

爲了發送game1.cs實例:

//in game1.cs 
//in your update method 
public void Update(GameTime gameTime) 
{ 
    //sends the current game instance to the other classes update method, where 
    // quit might be called. 
    otherClass.Update(gameTime, this); 
    //where 'this' is the actual keyword 'this'. It should be left as 'this' 
} 
+0

'Microsoft.Xna.Framework.Game'不包含'Quit'的定義,並且沒有可以找到接受'Microsoft.Xna.Framework.Game'類型的第一個參數的擴展方法'Quit'(你是否遺漏了使用指令或程序集引用?) – TheQuantumBros

+0

我認爲你仍然試圖錯誤地使用它。確保你在調用遊戲,實例,而不是遊戲,這個類。 Quit是我編寫的一個包含this.Exit()和this.Exit()的方法,它關閉了頁面。請注意,上面顯示的更新方法是在非game1類中的,並且一個新參數正在傳遞給更新方法(遊戲遊戲),而之前沒有這個方法。 – Colton

+0

我想通了,它是爲了Game1遊戲而不是遊戲遊戲,但是當我調試它時說這個;你調用的對象是空的。並突出顯示game.Quit(); – TheQuantumBros

2

你可以告訴XNA引擎立即關閉這樣的:

Game.Exit(); 

這將立即退出遊戲。請注意,我說Game.Exit() - 遊戲應該是你的遊戲實例。如果你是一個實現Game類中的編碼,你可以簡單地做到以下幾點:

Exit()

+0

我得到這個錯誤,我不知道如何解決它; 「非靜態字段,方法或屬性需要對象引用'Microsoft.Xna.Framework.Game.Exit()'」 – TheQuantumBros

+0

遊戲實際上並不是靜態的,我一開始就錯了。你的項目中的某些東西應該擴展遊戲,或者你正在創建一個新的遊戲。無論哪裏,只要使用myGame.Exit()(其中myGame是Game的實例)。 –

3

在遊戲主類(Game1默認情況下)使用全局變量:

public static Boolean exitgame = false; 

在更新的Game1常規:

protected override void Update(GameTime gameTime) 
{  
    SomeOtherClass.Update(gameTime); 
    if (exitgame) this.Exit(); 
    base.Update(gameTime); 
} 
5

你也可以使用一種單例模式,在你的主遊戲類中您可以定義該類的類型的靜態變量。當您構建或初始化該類時,您隨後將該變量設置爲this,使您可以在任何地方輕鬆訪問該類實例。

public class Game1 : Microsoft.Xna.Framework.Game 
{ 
    public static Game1 self; 

    public Game1() 
    { 
     self = this; 
     //... other setup stuff ... 
    } 

    //... other code ... 
} 

然後,當你想從代碼幾乎任何地方調用這個類中的方法,你會簡單地做:

Game1.self.Exit(); //Replace Exit with any method 

這個工作過程應該只有通常是單個Game類存在。當然,如果你想以某種方式獲得多個類,這種方法將不會有效。

+0

我喜歡這個解決方案:) – Ataraxia