好的,所以正確地做到這一點,你將不得不重新設計一點。
首先,您應該檢查新的遊戲手柄輸入(即,只有當新按下'A'時,您應該退出屏幕)。要做到這一點,你應該儲存以前和當前狀態手柄:
private GamePadState currentGamePadState;
private GamePadState lastGamePadState;
// in your constructor
currentGamePadState = new GamePadState();
lastGamePadState = new GamePadState();
// in your update
lastGamePadState = currentGamePadState;
currentGamePadState = GamePad.GetState(PlayerIndex.One);
真的是你需要做的是改變你的類,它與輸入的交易。你的HandleInput函數的基本功能應該被移入你的輸入類。輸入應該有一組函數來測試新的/當前的輸入。例如,對於情況下,你貼:
public Bool IsNewButtonPress(Buttons buton)
{
return (currentGamePadState.IsButtonDown(button) && lastGamePadState.IsButtonUp(button));
}
然後,你可以寫:
public override void HandleInput(InputState input)
{
if (input.IsNewButtonPress(Buttons.A)
{
this.ExitScreen();
AddScreen(new Background());
}
}
注意:這隻適用於一個控制器工作。爲了擴展實現,你需要做這樣的事情:
private GamePadState[] currentGamePadStates;
private GamePadState[] lastGamePadStates;
// in your constructor
currentGamePadStates = new GamePadState[4];
currentGamePadStates[0] = new GamePadState(PlayerIndex.One);
currentGamePadStates[1] = new GamePadController(PlayerIndex.Two);
// etc.
lastGamePadStates[0] = new GamePadState(PlayerIndex.One);
// etc.
// in your update
foreach (GamePadState s in currentGamePadStates)
{
// update all of this as before...
}
// etc.
現在,你要測試的每個控制器的輸入,所以你需要通過編寫後返回一個布爾值的函數來概括檢查陣列中的每個GamePadState是否按下按鈕。
檢查MSDN Game State Management Sample爲一個發達的實施。我不記得它是否支持多個控制器,但是結構很清晰,如果不是,可以很容易地進行調整。
我會盡力:)。謝謝 – Pilispring
很高興幫助:) 歡迎您 – Zero