Table of Contents

SpriteFont

高级 程序员

@'Stride.Graphics.SpriteFont' 类是绘制文本的便捷方式。它与 @'Stride.Graphics.SpriteBatch' 类配合使用。

Note

你需要将所有自定义代码放在自定义场景渲染器中,才能将其纳入组合。

加载 SpriteFont

字体资产编译后,可以使用 @'Stride.Core.Serialization.Contents.ContentManager' 将其加载为 @'Stride.Graphics.SpriteFont' 实例。它包含显示文本所需的所有选项(位图、字距调整、行距等)。

**代码:**将 SpriteFont 作为资产加载

var myFont = Content.Load<SpriteFont>("MyFont");

**代码:**加载系统字体

SpriteFont myFont;
protected override void InitializeCore()
{
    base.InitializeCore();
    // 在 FontSystem 中将系统字体注册为 Arial
    if(myFont is null) myFont = InitializeFont();    
}

private SpriteFont InitializeFont()
{
    var _fontSystem = Services.GetService<FontSystem>();
    _fontSystem?.RuntimeFonts.RegisterFont("Arial", Path.Combine(
        Environment.GetFolderPath(Environment.SpecialFolder.Fonts), "arial.ttf"));
    return _fontSystem?.LoadRuntimeFont("Arial", defaultSize: 12f);
}

在屏幕上书写文本

字体加载后,你就可以用 @'Stride.Graphics.SpriteBatch' 显示任意文本了。@'Stride.Graphics.SpriteBatch.DrawString*' 方法执行绘制。有关 SpriteBatch 的更多信息,请参阅 SpriteBatch 页面。

**代码:**书写文本

// 创建 SpriteBatch
var spriteBatch = new SpriteBatch(GraphicsDevice);

// 别忘了 Begin
spriteBatch.Begin(GraphicsContext);
 
// 从屏幕中心以红色绘制文本 "Helloworld!"
spriteBatch.DrawString(myFont, "Helloworld!", new Vector2(0.5, 0.5), Color.Red);
 
// 别忘了 End
spriteBatch.End();

各种重载允许你指定文本的方向、缩放、深度、原点等。你还可以对文本应用一些 @'Stride.Graphics.SpriteEffects':

  • None
  • FlipHorizontally
  • FlipVertically
  • FlipBoth

**代码:**高级文本绘制

// 从屏幕中心以红色倒置绘制文本 "Hello world!"
spriteBatch.DrawString(myFont, "Hello world!", new Vector2(0.5, 0.5), Color.Red, 0, new Vector2(0, 0), new Vector2(1,1), SpriteEffects.FlipVertically, 0);

另请参阅