2012-04-21 77 views

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(); 
Problemi correlati