我在製作遊戲,並從XML文件讀取對話文本。我試圖按照需要自動添加新行,以便它適合文本框。儘管如此,它不會正常工作。下面的代碼,因爲它目前是:試圖製作一個文本解析器,在需要的地方插入換行符,但它並不工作
SpriteFont dialogueFont = font31Adelon;
int lastSpace = 0;
string builder = "";
string newestLine = "";
float maxWidth = 921.6f;
float stringLength = 0;
for (int i = 0; i <= speech.Length - 1; i++) //each char in the string
{
if (speech[i] == ' ') //record the index of the most recent space
{
lastSpace = i;
}
builder += speech[i];
newestLine += speech[i];
stringLength = dialogueFont.MeasureString(newestLine).X;
if (stringLength > maxWidth) //longer than allowed
{
builder = builder.Remove(lastSpace); //cut off from last space
builder += Environment.NewLine;
i = lastSpace; //start back from the cutoff
newestLine = "";
}
}
speech = builder;
我的測試字符串是「這是一個長期的講話中指出,必須正確地劃分爲多個行的一個例子,是幾行長並沒有真正說任何重要的東西,因爲它只是示例文本。「
這是怎麼講話結束了尋找: http://www.iaza.com/work/120627C/iaza11394935036400.png
第一線工作,因爲它正好是它帶來了超過限制的空間,我想。
i = 81且lastSpace = 80是第二行結束的地方。助洗劑看起來像這樣的卸下襬臂命令之前: 「這是一個長的語音即\ r \ n已被分解成多行的一個實施例C」
並且運行它看起來像這樣後: 「這是一個很長的演講的例子,它必須分成多行「
第三行超出了i = 123和lastSpace = 120的大小限制。它看起來像這樣.Remove : 「這是一個很長的演講的例子,它必須正確地分成多行,它有幾行,並且」
和之後: 「這是一個長時間演講的例子,它必須正確地分解成多行。它是幾行長的「
正如你所看到的,即使字符80,該空格是它應該開始刪除的地方,它會切斷一個額外的字符。從我讀的東西中刪除。只用一個參數就可以刪除包括給定索引在內的所有內容,但它也會刪除i = 79,看起來它應該很容易從lastSpace中加上或減去以彌補這一點,但是我可以得到「索引越界「的錯誤,或者我截斷了更多的字符,我試着去做.Remove(lastSpace,i-lastSpace),這也是行不通的。與其他人不同,通過增加或減少lastSpace。我試圖以不同的方式分解東西,並且它們都沒有工作。我很厭煩看這個,任何幫助將不勝感激。
好吧,這使我現在。我想我一直在想換行符是「不是真的嗎」?現在感覺有點傻,但是非常感謝。 –