使用自定义内容处理器进行高级日语显示

更新页 :
页面创建日期 :

关于日语显示

在 MonoGame 中,文本绘制使用 SpriteFont,就像 XNA 一样。 有关 SpriteFont 的信息,请参阅显示字母数字字符了解有关字体样式的详细信息,因为它与 XNA 相同。

在使用 SpriteFont 之前,必须指定要使用的字符。 字符指定和生成时间可以几乎不花费任何成本,因为只有字母数字符号或大约100个字符,但成为数千个字符,当涉及到日语,生成时间变得非常长。 如果只指定使用的字符,则可以稍微缩短生成时间,但指定相反的字符可能更麻烦,如果字符发生更改,则更加困难。

为了解决这个问题,GD网站被自定义为使 XNA 的日语绘图更流畅(顺便说一下,网站运营的 Yuichi Ito - MSFT 是 XNA 框架开发人员之一)。 这简化了指定使用的字符,并缩短了生成时间,并允许您修饰文本。 有关详细信息,请参阅链接。

WPF フォントプロセッサーで作成されたテキストの描画

但是,由于页面前面的 WPF 字体处理器适用于 XNA,因此 MonoGame 不能按原样使用它。 因此,我想把它移植到MonoGame。

下载 WPF 字体处理器

打开以下站点:

ひにけにGD - 真・簡単(かもしれない)日本語表示

向下滚动时,有两个链接,您可以单击上面的链接下载包含排序代码的项目。 底部只是 DLL,因此您不必下载它。

プロジェクトをダウンロード

请展开下载的文件,以便检索内容。

ダウンロードされたファイル

为 WPF 字体处理器创建项目

我想创建 WPF 字体处理器 DLL,该 DLL 适用于"任意 CPU",但在这种情况下,在 XNA 框架的"内容管道扩展库"中创建项目时,只能创建 x86,因此我将从常规类库创建它。

クラス ライブラリの作成

创建项目后,请删除"Class1.cs",因为它不。

「Class1.cs」の削除

然后添加引用。

参照の追加

由于在 WPF 中绘制文本,因此需要与 WPF 相关的引用。 首先,从"框架"到"演示核心"检查。

「PresentationCore」にチェック

然后检查"WindowsBase"。 现在,按"确定"按钮确认它,然后再次打开引用管理器。

「WindowsBase」にチェック

选择左侧的"浏览",然后单击下面的"浏览"按钮。

「参照」ボタンをクリック

打开以下文件夹路径:

  • C:\程序文件 (x86)_MSBuild_MonoGame_v3.0_Tools_

从那里,我们将添加两个 DLL:

  • MonoGame.Framework.dll
  • MonoGame.Framework.Content.Pipeline.dll

2つの DLL を追加

确保选中,然后单击"确定"按钮。

チェックされていることを確認

查看添加的引用。

追加された参照を確認

然后,从下载的项目中,将 WpfFontPipeline 文件夹中的源代码添加到当前正在编辑的项目。

ソースコードを追加

添加的状态。

追加した状態

确保生成配置为"释放"和"任意 CPU"。

ビルド構成が「Release」「Any CPU」になっていることを確認

生成并验证是否已成功生成。

ビルド結果

确保已创建 DLL。

DLL が作成されていることを確認

创建游戏项目

创建 MonoGame 项目。 平台可以是任何内容。

MonoGame のプロジェクトを作成

将刚刚创建的 DLL 放在"内容"文件夹中。 DLL 的位置并不重要,但在这种情况下,您需要相对或绝对路径,因此我将暂时留在这里。

 DLL を Content フォルダに配置

打开内容.mgcb,并在选择"内容"时打开"引用"。

• 如果双击"内容.mgcb"时未打开,请从"开始"菜单启动"MonoGame Plipeline"。

References を開く

在文本框中,键入刚刚创建的 DLL 的文件名,或相对于 Content.mgcb 的路径或绝对路径。

设置后,DLL 尚未反映,因此保存项目后,请关闭 MonoGame 管道,然后重新打开它。

DLL のファイル名を入力

创建子画面字体。 从菜单中选择"编辑">"添加">"新建项目"。

スプライトフォントを作成

从项目中选择"SpriteFont 描述"以添加它。 (顺便说一下,在添加 SpriteFont 后,我打开 SpriteFont 文件以更改字体名称和大小,以便在运行时更易于查看。

「SpriteFont Description」を選択

如果选择添加的 SpriteFont,您将看到处理器允许您选择 WPF 字体处理器。

「WPF フォントプロセッサー」が選択できる

由于可以设置每个参数,因此这次我尝试设置它们,如图所示。 遗憾的是,当前版本的 MonoGame 管道不允许更改颜色。

各パラメータ設定

尝试生成。 6860 个字符已生成,包括 JIS 第二级。 然而,你可以看到,时间是大约9秒,所以速度相当快。

ビルド完了

现在,我们使用此 SpriteFont 绘制它,但代码与 XNA 完全相同。 您可以使用"显示字母数字"中介绍的代码来绘制文本。 当然,我们也会说日语。

我想只列出我添加的代码。

字段的定义部分。 添加了"SpriteFont"。

GraphicsDeviceManager graphics;
SpriteBatch spriteBatch;

SpriteFont font;

在 LoadContent 方法中加载和创建字体数据。

protected override void LoadContent()
{
  // Create a new SpriteBatch, which can be used to draw textures.
  spriteBatch = new SpriteBatch(GraphicsDevice);

  // TODO: use this.Content to load your game content here

  // フォントデータの読み込み
  font = Content.Load<SpriteFont>("Font");
}

使用 Draw 方法绘制日语。

protected override void Draw(GameTime gameTime)
{
  GraphicsDevice.Clear(Color.CornflowerBlue);

  // TODO: Add your drawing code here
  spriteBatch.Begin();

  spriteBatch.DrawString(font, "真・簡単(かもしれない)日本語表示",
                    new Vector2(50, 50), Color.White);

  spriteBatch.DrawString(font, @"・OpenTypeフォント対応
・処理速度の高速化
・JIS漢字追加機能
・文字装飾",
              new Vector2(50, 150), Color.White);

  spriteBatch.End();

  base.Draw(gameTime);
}

执行时,将绘制文本。 有点难以理解,但当文本具有边框时,中间有蓝色渐变。

像这样,日语绘画变得更容易,现在我可以画装饰字符。

テキストの描画結果

最后,在 MonoGame 管道上更改文本修饰的颜色,但您可以直接打开和修改文件,从而了解如何执行此操作。

保存并关闭项目后,使用文本文件打开".mgcb"文件。

「.mgcb」ファイルをテキストファイルで開く

向下滚动时,目标参数具有颜色信息,因此请直接编辑它。

色情報を直接編集

保存文本后,再次打开并生成 MonoGame 管道。 当你运行它时,你会发现颜色变了。

色変更したテキスト