I need to use different fontsize of spritefont, Have to I create new spritefont for the each size?
Basically yes.
There is an overload of SpriteBatch.DrawString
that gives you an option to scale your text.
However the major downside to this is that your text will become pixelated as you scale it up. If you start at a higher resolution and scale down you will start to get artefacts as you get to smaller sizes.
So if you have a fixed number of sizes, you should create multiple versions of your sprite font at the different sizes you require.
If you want continuously scalable text with sharp edges, you could perhaps look into vector fonts. The Nuclex Framework has some code to do that.
Suppose the SpriteFont
you are using is named x.spritefont.
Do the following to create new SpriteFont
for each size.
Now create multiple instances of SpriteFont
and load them accordingly.
SpriteFont sf_s10;
SpriteFont sf_s14;
protected override void LoadContent()
{
sf_s10 = Content.Load<SpriteFont>("x_10");
sf_s14 = Content.Load<SpriteFont>("x_14");
//OTHER LOADS
}
to dynamically change fontSize
, do the following:
SpriteFont current_font;
protected override void Update(GameTime gameTime)
{
if(/*SOME_CONDITION_TO_DECREASE_SIZE*/)
current_font=sf_s10;
if(/*SOME_CONDITION_TO_INCREASE_SIZE*/)
current_font=sf_s14;
}
You can also make your font at the largest size you need and scale down from there.