C#XNA:使用类函数获取用户输入

时间:2014-10-24 17:19:13

标签: c# xna

我正在使用C#和XNA编写输入法。在我的Game.cs中,这是我的代码:

    input = new Input();
    input.Font = Content.Load<SpriteFont>("Arial");


 protected override void Update(GameTime gameTime)
{
    string messageString;

    KeyboardState keyState = Keyboard.GetState();
    Keys[] pressedKeys;
    pressedKeys = keyState.GetPressedKeys();
    messageString = " ";
    for (int i = 0; i < pressedKeys.Length; i++)
        messageString = messageString + pressedKeys[i].ToString() + "";
    base.Update(gameTime);
 }



protected override void Draw(GameTime gameTime)
{
    GraphicsDevice.Clear(Color.CornflowerBlue);
    spriteBatch.Begin();
    input.Draw(spriteBatch);
     spriteBatch.End();
     base.Draw(gameTime);  
}

在我的Input.cs中,我写道:

public class Input
    {

        public Input()
        {
        }

       public string messageString { get; set; }
       public SpriteFont Font { get; set; }

       public void Draw(SpriteBatch spriteBatch)
            {
            Vector2 messageVector = new Vector2(50, 100);
            spriteBatch.DrawString(Font,messageString,messageVector,Color.White);

            }
    }

但是,我收到错误,如&#34; ArgumentNullException未处理:值不能为空。参数名称:text&#34;上 这条线

spriteBatch.DrawString(Font,messageString,messageVector,Color.White);

但我在我的游戏中做到了。请问如何解决?这是截图

enter image description here

更新:使用以下方法解决问题。顺便说一下,应该注意类定义(公共或私有)及其内部参数。

1 个答案:

答案 0 :(得分:2)

您永远不会将Input类中的messageString指定为任何内容。 试试这样的事情

protected override void Update(GameTime gameTime)
{
    // Modified this
    string messageString = String.Empty;
    input.messageString = String.Empty;    


    KeyboardState keyState = Keyboard.GetState();
    Keys[] pressedKeys;
    pressedKeys = keyState.GetPressedKeys();
    for (int i = 0; i < pressedKeys.Length; i++)
        messageString = messageString + pressedKeys[i].ToString() + "";

    // Added this - this should be what resolves the error you were getting
    input.messageString = messageString;

    base.Update(gameTime);
 }

我们将messageString初始化为空字符串,评估您按下的键,然后将消息字符串指定为已评估的内容。注意:我只是在这里使用您的代码,而不是建议这是了解您正在寻找的内容的最佳方式。