2013-07-02 65 views
0

我試圖實現一種方法讓玩家更改控件,然後將該數據保存到文本文件。C#XNA鍵盤輸入問題。代碼總是返回false

只有我的InputManager類使用Xna.Input.Keys枚舉,其他所有獲得鍵盤輸入傳遞的字符串。 InputManager包含一個字典,其中的鍵是從外部傳入的動態字符串,並且該值是Input.Keys枚舉中的相應鍵。

所有這些都是從一個文件(keyconfig.cfg,只是一個標準的文本文件)加載。
我試着以各種方式修改代碼,但我似乎無法讓它正常工作。這個問題似乎是未來礦的該特定方法中,這是輸入管理的一部分:

public bool IsButtonPressed(string keyString) 
    { 
     if (keyState.IsKeyDown(KeyFromString(keyString)) && keyState_old.IsKeyUp(KeyFromString(keyString))) 
      return true; 
     return false; 
    } 
  • KeyFromString連鑄字符串到按鍵型
  • keyState & keyState_old是KeyboardState實例(_old作爲一個最後一幀圖像)
  • 的KeyboardState實例通過更新()

我設置我的keyState更新每一幀在輸入管理像這樣的更新()內個keyState_old變量:

public void Update(GameTime gameTime) 
{ 
    keyState = Keyboard.GetState(); 
    mouseState = Mouse.GetState(); 
    //Updates some other stuff within the class here, unrelated to keyboard input 
    keyState_old = keyState; 
} 

我絕對被困在此,道歉,如果任何的這個不清楚,我的英語不是最好的。提前致謝。

+0

第一:爲KeyFromString操作引入變量,因此您可以檢查是否解析了有效的鍵,然後檢查語句的第一部分是否滿足,然後是第二個。調試應該給你答案。 – wudzik

+0

@wudzik感謝您的快速回復。增加了變量,並且每次都得到正確的密鑰。 經過一些調試後,我發現我的keyState由於某種原因沒有更新,並且只包含默認值。 – R4PTURExDCT

+1

你能發佈獲取keyStates的代碼嗎?我假設你正在使用Keyboard.GetState() – gareththegeek

回答

0
keyState = Keyboard.GetState(); 
keyState_old = keyState; 

這就是你的問題。你得到新的狀態,並把它放入keyState,然後你把keyState轉換成keyState_old ...所以你有兩個相同狀態的副本。把這兩條線放在一起,而不是那些不相關東西的任何一邊,反過來做。保存舊的狀態,然後得到新的。

+0

謝謝,作品像魅力! – R4PTURExDCT

0

這可能是更安全的閱讀最新狀態來分配keyState_old以避免覆蓋它

public void Update(GameTime gameTime) 
{ 
    keyState_old = keyState; // Do this first 

    keyState = Keyboard.GetState(); // Then this 
    mouseState = Mouse.GetState(); 
    //Updates some other stuff within the class here, unrelated to keyboard input 
} 

否則,如果一個調用,以IsButtonPressed從InputManager.Update方法外進行,當前和舊密鑰國家將是相同的值

+0

謝謝,我感謝你的幫助! – R4PTURExDCT