如何在精灵字体中突出显示文本的一部分
本文关键字:显示 文本 一部分 精灵 字体 | 更新日期: 2023-09-27 18:33:12
我在 xna 中工作,我的问题如下。我收到一条文本,其中第一次出现">_____"应该以某种方式突出显示给用户。这可以通过使这部分的字体大小变大、突出显示或其他方式来完成,如果有人有一个好主意。
public void DrawStringWithStyle(SpriteBatch batch, SpriteFont thisFont, Vector2 pos, string thisText, SpriteFont BoldFont)
{
string[] paragraphs = Regex.Split(thisText, @"''(c[a-fA-F0-9]{6})|''(b)|''(o)|''(l)");
SpriteFont CurrentFont = font;
float tempPosX = pos.X;
for (int i = 0; i < paragraphs.Length; i++)
{
batch.DrawString(CurrentFont, paragraphs[i], new Vector2(tempPosX, pos.Y), Color.Black);
if (i + 1 < paragraphs.Length)
{
tempPosX += CurrentFont.MeasureString(paragraphs[i]).X;
i++;
switch (char.ToLower(paragraphs[i][0]))
{
case 'o': CurrentFont = font; break;
case 'b': CurrentFont = BoldFont; break;
case 'l':
paragraphs[i+1] = paragraphs[i+1].Insert(0, Environment.NewLine);
tempPosX = pos.X;
break;
}
}
}
}
所以我遇到了 2 个新问题,你可能知道。其中之一是连续出现 2 个命令,因为那样它会搞砸 bigtime,需要能够检查下一个是命令还是以某种方式是普通段落。另一个问题需要一个类似的解决方案,因为我的 (l( 命令只有在以下段落不是命令时才有效。知道如何解决我的 2 个问题吗?
拆分具有不同样式的文本...并用其样式绘制每个部分。
您可以使用 ''c 更改颜色:"我的 ''cFF5566favaourite ''cFFFFFFgame 是 ''c4444444 魔兽争霸 3",或者使用 ''b 使用粗体字体...
public static void DrawStringWithStyle( this SpriteBatch batch, SpriteFont font, Vector2 pos, string text, Color color, SpriteFont BoldFont=null )
{
string[] paragraphs = Regex.Split( text, @"''(c[a-fA-F0-9]{6})|''(b)|''(n)" );
Color CurrentColor = color;
SpriteFont CurrentFont = font;
for ( int i=0; i< paragraphs.Length; i++ )
{
batch.DrawString( CurrentFont, paragraphs[i], pos, CurrentColor );
if ( i+1<paragraphs.Length )
{
pos.X += CurrentFont.MeasureString( paragraphs[i] ).X;
i++;
switch (char.ToLower(paragraphs[i][0]))
{
case 'c':
CurrentColor.R = byte.Parse( paragraphs[i].Substring( 1, 2 ) );
CurrentColor.G = byte.Parse( paragraphs[i].Substring( 3, 2 ) );
CurrentColor.B = byte.Parse( paragraphs[i].Substring( 5, 2 ) );
break;
case 'n': CurrentFont = font; break;
case 'b': CurrentFont = BoldFont; break;
}
}
}
}