XNA文本框循环

时间:2013-07-23 23:23:36

标签: c# textbox xna

因此,我试图在XNA 4.0赢得游戏上创建一个文本框(不完全是文本框,只是更改spriteFont文本),这是我的代码到目前为止:

usernameVar.Draw(spriteBatch, newInputText);

那将每帧绘制newInputText字符串

newInputText = username.update(mouse);

这将设置字符串,但继承人我的问题

class Textbox
{
    public Texture2D texture;
    public Rectangle rectangle;
    public bool isClicked;

    public Textbox(Texture2D newTexture, Rectangle newRectangle)
    {
        texture = newTexture;
        rectangle = newRectangle;
    }
    public void Draw(SpriteBatch spriteBatch)
    {
        spriteBatch.Draw(texture, rectangle, Color.White);
    }
    public String update(MouseState mouse)
    {
        Rectangle mouseRectangle = new Rectangle(mouse.X, mouse.Y, 1, 1);
        var textboxText = new newText();

        if (mouseRectangle.Intersects(rectangle))
        {
            isClicked = true;
            if (isClicked)
            {
                textboxText.newtext = "a";
                Connection.sendPacketBool("ae", textboxText.newtext);
                return textboxText.newtext;  
            }
        }

        return null;
    }
}
class newText
{
    public String newtext
    {
        get 
        { 
            return this.newtext; 
        }
        set 
        { 
            this.newtext = value; 
        }
    }
}

这个textbox.cs文件首先给我一些错误,我应该怎么做才能避免在IF语句之外返回一些东西?

public String update(MouseState mouse)
    {
        Rectangle mouseRectangle = new Rectangle(mouse.X, mouse.Y, 1, 1);
        var textboxText = new newText();

        if (mouseRectangle.Intersects(rectangle))
        {
            isClicked = true;
            if (isClicked)
            {
                textboxText.newtext = "a";
                Connection.sendPacketBool("ae", "a");
                return "yo";  
            }
        }

        return null;
    }

因为返回null会破坏我的文本框(我无法将空文本添加到spritefont) 此外,如果我删除返回null添加返回“某事”我在set propertie上得到此错误

An unhandled exception of type 'System.StackOverflowException'

对不起,对于C#和所有这些东西我都很新,谢谢

1 个答案:

答案 0 :(得分:3)

我不确定你项目的确切结构,我不确定newText类的原因,但是它包含的属性调用了自己,over,over,and over again

class newText
{
    public String newtext
    {
        get 
        { 
            return this.newtext; //Get newtext again, which gets it again, and again, etc
        }
        set 
        { 
            this.newtext = value; //Set newtext, which calls set again, and again...
        }
    }
}

当你获得或设置newtext时,它将反复获取或设置自身,从而产生递归循环。这将永远不会结束,并将导致StackOverflowException

使用property的正确方法是让公共访问器(NewText)执行逻辑(在这种情况下,只需获取并设置)并返回或设置一个值,在此case,存储变量newText

以下是一个例子:

private string newText; //Storage Field

public string Newtext //Accessor
{
    get { return newText; }
    set { newText = value; }
}

C#3.0有automatic properties,所以这不一定是必要的(:P)。

作为补充说明,您不必使用String课程,stringStringsame thing,但通常使用string首选方法。