C# 如何突出显示spritefont中文本的一部分

C# 如何突出显示spritefont中文本的一部分,c#,textbox,xna,highlight,spritefont,C#,Textbox,Xna,Highlight,Spritefont,我在xna工作,我的问题如下。我收到一条短信,第一次出现 “”\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu”应该以某种方式为用户设置为highlightet。如果有人有好主意,可以通过放大、突出显示或其他方式来实现 public void DrawStringWithStyle(SpriteBatch batch, SpriteFont thisFont, Vector2 pos, string thisText, SpriteFo

我在xna工作,我的问题如下。我收到一条短信,第一次出现 “”\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu”应该以某种方式为用户设置为highlightet。如果有人有好主意,可以通过放大、突出显示或其他方式来实现

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;
                }
            }
        }
    }
public void DrawStringWithStyle(SpriteBatch批处理、SpriteFont thisFont、Vector2 pos、string thisFont、SpriteFont BoldFont)
{
string[]段落=Regex.Split(这个文本,@“\\(c[a-fA-F0-9]{6})\\(b)\\(o)\\(l)”;
SpriteFont CurrentFont=字体;
float tempPosX=位置X;
对于(int i=0;i<段落长度;i++)
{
batch.DrawString(当前字体,段落[i],新矢量2(tempPosX,位置Y),颜色为黑色);
如果(i+1<段落长度)
{
tempPosX+=CurrentFont.MeasureString(第[i]段)X;
i++;
开关(字符ToLower(第[i][0]段)
{
案例“o”:CurrentFont=font;中断;
案例“b”:CurrentFont=BoldFont;中断;
案例“l”:
段落[i+1]=段落[i+1]。插入(0,Environment.NewLine);
tempPosX=位置X;
打破
}
}
}
}

所以我有两个新的问题,你可能知道。其中一个是两个命令不能排成一行,因为这样会把时间搞砸,需要能够检查下一个是命令还是正常段落。另一个问题需要这样的解决方案,因为我的(l)命令只有在以下段落不是命令时才起作用。你知道如何解决我的两个问题吗?

拆分具有不同样式的文本。。。并绘制每个部分的样式

您可以使用a\c更改颜色:“My\cFF5566favaourite\cFFFFFFgame is\c44444warcraft 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;
            }
        }
    }
}
public static void DrawStringWithStyle(此SpriteBatch批处理,SpriteFont字体,Vector2位置,字符串文本,颜色,SpriteFont BoldFont=null)
{
string[]段落=Regex.Split(文本,@“\\(c[a-fA-F0-9]{6})\\(b)\\(n)”;
颜色当前颜色=颜色;
SpriteFont CurrentFont=字体;
对于(int i=0;i<段落长度;i++)
{
batch.DrawString(CurrentFont,段落[i],位置,CurrentColor);

if(i+1这似乎是一个很棒的想法Blau,但你应该详细说明!我不确定user1322838是否能够从头开始编写代码,因此如果你能将其放入代码中,或者至少给出如何实现它的想法,那就太好了。好吧……我会做……但也许他想自己做……)非常感谢你的回答非常有帮助;)嘿,我在问题中添加了一些内容,因为我遇到了一个问题,我真的不知道如何解决它。对不起,我的英语不足以理解你。为什么一行不能包含两个命令?为什么要在命令l中插入一个换行符?我想做一些像tempPos.X=pos这样的事情很容易.X;tempPos.Y+=CurrentFont.VerticalLineSpace;Yes;过了一段时间后,我发现如果两个命令紧跟在一起,则一段由“”组成将在它们之间创建。我不知道这是问题所在,所以修复了它。但无论如何,感谢如果命令在开始时是相同的,但为什么会出现问题?我在寻找这一点…这样代码更容易…如果spritebatch.drawstring提供任何问题检查段落的长度是否大于0来绘制它。。。