【问题标题】:How to align text drawn by SpriteBatch.DrawString?如何对齐 SpriteBatch.DrawString 绘制的文本?
【发布时间】:2012-05-03 01:44:11
【问题描述】:

有没有一种简单的方法可以将文本向右和居中对齐(而不是默认向左对齐)?

【问题讨论】:

    标签: c# text xna alignment drawstring


    【解决方案1】:

    我使用这个代码:

     [Flags]
     public enum Alignment { Center=0, Left=1, Right=2, Top=4, Bottom = 8 }
    
     public void DrawString(SpriteFont font, string text, Rectangle bounds, Alignment align, Color color )
        {
            Vector2 size = font.MeasureString( text );
            Vector2 pos = bounds.GetCenter( );
            Vector2 origin = size*0.5f;
    
            if ( align.HasFlag( Alignment.Left ) )
                origin.X += bounds.Width/2 - size.X/2;
    
            if ( align.HasFlag( Alignment.Right ) )
                origin.X -= bounds.Width/2 - size.X/2;
    
            if ( align.HasFlag( Alignment.Top ) )
                origin.Y += bounds.Height/2 - size.Y/2;
    
            if ( align.HasFlag( Alignment.Bottom ) )
                origin.Y -= bounds.Height/2 - size.Y/2;
    
            DrawString( font, text, pos, color, 0, origin, 1, SpriteEffects.None, 0 );
        }
    

    【讨论】:

    • 这不适用于多行文本
    • 不,不打算这样做
    【解决方案2】:

    第一步是使用SpriteFont.MeasureString()测量字符串。

    然后,例如,如果您想将其绘制到某个点的左侧,而不是默认的右侧,那么您需要从文本绘制原点中减去测量的 X 宽度。如果你想让它居中,那么你可以使用一半的测量值,等等。

    【讨论】:

      【解决方案3】:
      SpriteFont mFont;
      SpriteBatch mSprite;
      
      mSprite.Begin();
      mSprite.DrawString(mFont, "YourText", new Vector2(graphicsDevice.Viewport.Width / 2 - mFont.MeasureString("YourText").Length() / 2, 0), Color.White, 0, new Vector2(0, 0), 1f, SpriteEffects.None, 0f);
      mSprite.End();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-10-21
        • 1970-01-01
        • 2016-06-25
        • 2015-07-09
        • 2012-03-12
        • 2011-12-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多