开发者

how to change fontsize during the game in XNA?

I need to u开发者_运维百科se 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.


You can also make your font at the largest size you need and scale down from there.


Suppose the SpriteFont you are using is named x.spritefont. Do the following to create new SpriteFont for each size.

  • Open the x.spritefont file from solution explorer.
  • Go to the tag and edit it to your desired font size.
  • To make multiple size font, duplicate the file and change the tags accordingly. Rename the files with size appended at last for easy remembering.

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;
}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜