XNA에는 의 너비와 높이를 반환 할 수있는 MeasureString 메서드가있는 Spritefont 클래스가 있습니다. 적절한 너비와 높이 (Rectangle이 매개 변수로 사용됨)에 맞는 경우 Environment.Newline
이 올바른 위치에 삽입 된 문자열을 효율적으로 반환하는 메서드를 만드는 방법을 이해하려고합니다. 또한 LINEBREAK 하나의 단어를워드 랩은 어떻게 구현합니까?
public static string WrapText(SpriteFont font, string text, float maxLineWidth)
{
string[] words = text.Split(' ');
StringBuilder sb = new StringBuilder();
float lineWidth = 0f;
float spaceWidth = font.MeasureString(" ").X;
foreach (string word in words)
{
Vector2 size = font.MeasureString(word);
if (lineWidth + size.X < maxLineWidth)
{
sb.Append(word + " ");
lineWidth += size.X + spaceWidth;
}
else
{
if (size.X > maxLineWidth)
{
if (sb.ToString() == "")
{
sb.Append(WrapText(font, word.Insert(word.Length/2, " ") + " ", maxLineWidth));
}
else
{
sb.Append("\n" + WrapText(font, word.Insert(word.Length/2, " ") + " ", maxLineWidth));
}
}
else
{
sb.Append("\n" + word + " ");
lineWidth = size.X + spaceWidth;
}
}
}
return sb.ToString();
}
이 [XNA Word Wrapping] (http://www.xnawiki.com/index.php/Basic_Word_Wrapping)을 발견했습니다. 일부 [코드] (http://xboxforums.create.msdn.com/forums/p/10536/55295.aspx)가있는 다른 스레드. –
@AlinaB. 고마워, 그건 내 문제를 실제로 해결! 위키가 사라질 경우를 대비하여 해당 페이지의 코드를 답으로 게시해야합니다. 대답은 당신에게 달려 있습니다. – user1306322