2012-06-25 96 views
0

我有一個奇怪的問題,這是最明顯的,由於我作爲一個XNA遊戲程序員的新地位,但在這裏不用。我有一個KeyboardManager類我做,很簡單:鍵盤狀態比較失敗

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using Microsoft.Xna.Framework; 
using Microsoft.Xna.Framework.Content; 
using Microsoft.Xna.Framework.Graphics; 
using Microsoft.Xna.Framework.Input; 

namespace CrazyCoders.XYZ.Framework 
{ 
    public class Keyboard 
    { 

     public KeyboardState previousState = Microsoft.Xna.Framework.Input.Keyboard.GetState(); 
     public KeyboardState newState; 

     public void begin() 
     { 
      //Get the new state 
      KeyboardState newState = Microsoft.Xna.Framework.Input.Keyboard.GetState(); 
     } 

     public Keys[] detectKeyDowns() 
     { 
      return newState.GetPressedKeys().Except(previousState.GetPressedKeys()).ToArray(); 
     } 

     public Keys[] detectKeyUps() 
     { 
      return previousState.GetPressedKeys().Except(newState.GetPressedKeys()).ToArray(); 
     } 

     public void end() 
     { 
      //Save the new state for the next pass 
      previousState = newState; 
     } 

    } 
} 

該類保存先前的鍵盤狀態,並採取新的,當你調用開始()。然後,使用newState和previousState的detectKeyDowns和detectKeyUps計算陣列例外返回什麼真正最後按下或取消按下。

問題是,事情是不工作...

我想我自己的newState後添加

​​

右取指在開始和它打破,它工作得很好,我看到例如,我的「我」鍵被按下。但是,當我調用detectKeyDowns時,我可以似乎除了正確。

難道你們看不到我做錯了嗎?

回答

1

在你begin()方法,則需要重新定義newState變量。從行首開始刪除「KeyboardState」,並且所有內容都應該開始工作。