2013-08-24 45 views
0

所以我有這樣的代碼:變量:XNA - 如何爲不同的選項使用相同的密鑰?

enum gameState 
    { 
     gameLoading, 
     mainMenu, 
     gameOptions, 
     levelSelect, 
     gamePlaying, 
     gameOver 
    } 

Update()方法:

 if (CurrentGameState == gameState.gameLoading) 
     { 
      if (Keyboard.GetState().IsKeyDown(Keys.E)) 
      { 
       graphics.ToggleFullScreen(); //? 
      } 
      graphics.ApplyChanges(); 
     } 
     ... 
     //gameState.gameLoading logic 
     if (Keyboard.GetState().IsKeyDown(Keys.Enter)) 
     CurrentGameState = gameState.mainMenu; 

所以,我要的是已在gameState.gameLoading回車按下兩者分辨率全屏和gameState等於到mainMenu。當在gameState.mainMenu中時,按回車鍵不能將分辨率從全屏切換到窗口。如何實現這一目標?也許使用列表?

+0

你的問題不清楚,當你按下回車鍵時,你是否想改變全屏和遊戲狀態? – Sayse

+0

是的,這就是我想要的。 – PowerUser

回答

1

我想你應該爲gameState有不同的類別,如果他們需要有不同的行爲。這將確保您每個Update僅影響其自己的gameState

+0

是的,應該這樣做! – PowerUser

+0

@PowerUser - 我不確定這是如何回答你的問題的,真的應該發生的是你應該爲你的遊戲狀態設置一個switch語句,然後在這裏面可以有你的邏輯,或者指向一個差異類作爲pinckerman已經聲明 – Sayse

+0

是的,因爲我一直在評論我的另一個XNA問題,所以我的代碼中有'switchStates'語句。也正如我上面提到的'//gameState.gameLoading logic'我的意思。我的'switch'中的第一個'case'。 – PowerUser

1

既然您已經決定了遊戲的狀態,爲什麼不使用狀態機設計模式來控制您的輸入處理行爲? 此模式的議程是將工作從實際對象委託給其狀態。你所做的就是創建一個類,併爲每個狀態創建一個類似於pinckerman的Update()方法,並在那裏輸入所有的輸入處理+狀態轉換邏輯。你可以在這裏找到一個例子:http://sourcemaking.com/design_patterns/state。 當我使用它時,我通過使用一個抽象的狀態類並從它繼承來完全分離上下文的狀態和轉換。這使得如果需要更改狀態機更容易。 下面是一個簡單的例子:

public class Context 
{ 
    private GameState state; 

    public void Update() 
    { 
     state.Update(); 
    } 

    public void ChangeState(GameState nextState) 
    { 
     state = nextState; 
    } 
} 

public abstract class GameState 
{ 
    protected Context context; 

    public virtual void Update() 
    { 
     // some basic implementation if you want. 
    } 
} 

public class GameLoadingState : GameState 
{ 
    public override void Update() 
    { 
     // Handle key presses. 
     context.ChaneState(new MainMenuState(context)); 
    } 
} 

public class MainMenuState : GameState 
{ 
    public override void Update() 
    { 
     // Handle key presses in some other way. 
     // Change state if needed. 
    } 
} 

同樣,如果你不喜歡被動執行上下文,你可以改變它更加活躍。 希望這有助於!

相關問題