2012-04-21 19 views

Respuesta

16

El primer paso es medir la cadena usando SpriteFont.MeasureString().

Luego, por ejemplo, si desea dibujarlo a la izquierda de un determinado punto, en lugar de a la derecha como es el valor predeterminado, debe restar el ancho X de la medición del origen del dibujo de texto. Si desea que se centra, entonces se puede utilizar la mitad de la medida, etc.

15

utilizo este código:

[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(); 
Cuestiones relacionadas