C'è un modo semplice per allineare il testo a destra e al centro (invece di default a sinistra)?Come allineare il testo disegnato da SpriteBatch.DrawString?
14
A
risposta
16
Il primo passaggio consiste nel misurare la stringa utilizzando SpriteFont.MeasureString()
.
Quindi, ad esempio, se si desidera disegnarlo a sinistra di un determinato punto, anziché a destra come predefinito, è necessario sottrarre la larghezza X della misurazione dall'origine del disegno di testo. Se si vuole che sia centrato, quindi è possibile utilizzare la metà della misura, ecc
15
io uso questo codice:
[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);
}
-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();