2013-07-23 47 views
0

所以我嘗試做一個文本框(當然不完全是一個文本框,只是改變SpriteFont類文本)在XNA 4.0雙贏遊戲繼承人到目前爲止我的代碼:XNA文本框環

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.c s文件首先給我一些錯誤,我應該怎麼做才能避免在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類) 另外,如果我刪除返回空加回報「東西」我得到這個錯誤在集合propertie

An unhandled exception of type 'System.StackOverflowException' 

對不起,這一點,即時通訊很新的C#和所有這些東西,感謝

+1

當您有無限循環或遞歸時,會發生堆棧溢出。 – ClassicThunder

+0

你如何使用'Update()'方法?這個問題似乎不在該方法之內。 –

回答

3

我不知道你的項目的具體結構,我不知道該newText類的原因,但屬性它包含自己的名字,ove R,結束,再結束。

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)將執行邏輯(在這種情況下,只是get和set),並返回或設置一個值,在這種情況下,將存儲變量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通常是首選的方法。