如何在XNA游戏中改变字体大小?

12

我需要使用不同大小的SpriteFont字体,我是否需要为每个大小创建新的SpriteFont?

3个回答

30
基本上是的。
有一种过载SpriteBatch.DrawString,它可以让你选择缩放文本。
然而,这样做的主要缺点是,随着缩放,你的文本会变得像素化。如果你从更高的分辨率开始缩放,当你到达较小的尺寸时,你会开始出现伪影。
因此,如果你有固定数量的尺寸,你应该创建多个版本的精灵字体,以满足你所需的不同尺寸。
如果你想要具有锐利边缘的连续可缩放文本,你可以考虑使用矢量字体。Nuclex Framework有一些代码可以做到这一点

4

你也可以将字体设为所需的最大尺寸,然后进行缩小。


4
假设您使用的SpriteFont名称为x.spritefont。 按以下步骤为每个大小创建新的SpriteFont
  • 从解决方案资源管理器中打开x.spritefont文件。
  • 转到标记并将其编辑为所需的字体大小。
  • 要创建多个大小的字体,请复制该文件并相应更改标记。以大小结尾重命名文件,以便轻松记忆。
现在创建多个SpriteFont实例并相应加载它们。
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 
}

要动态更改 fontSize,请执行以下操作:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接