因此,我试图在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#和所有这些东西我都很新,谢谢
答案 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
课程,string
和String
是same thing,但通常使用string
首选方法。