我正在使用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);
但我在我的游戏中做到了。请问如何解决?这是截图
更新:使用以下方法解决问题。顺便说一下,应该注意类定义(公共或私有)及其内部参数。
答案 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初始化为空字符串,评估您按下的键,然后将消息字符串指定为已评估的内容。注意:我只是在这里使用您的代码,而不是建议这是了解您正在寻找的内容的最佳方式。