使用自定义内容处理器进行高级日语显示
关于日语显示
在 MonoGame 中,文本绘制使用 SpriteFont,就像 XNA 一样。 有关 SpriteFont 的信息,请参阅显示字母数字字符或了解有关字体样式的详细信息,因为它与 XNA 相同。
在使用 SpriteFont 之前,必须指定要使用的字符。 字符指定和生成时间可以几乎不花费任何成本,因为只有字母数字符号或大约100个字符,但成为数千个字符,当涉及到日语,生成时间变得非常长。 如果只指定使用的字符,则可以稍微缩短生成时间,但指定相反的字符可能更麻烦,如果字符发生更改,则更加困难。
为了解决这个问题,GD网站被自定义为使 XNA 的日语绘图更流畅(顺便说一下,网站运营的 Yuichi Ito - MSFT 是 XNA 框架开发人员之一)。 这简化了指定使用的字符,并缩短了生成时间,并允许您修饰文本。 有关详细信息,请参阅链接。
但是,由于页面前面的 WPF 字体处理器适用于 XNA,因此 MonoGame 不能按原样使用它。 因此,我想把它移植到MonoGame。
下载 WPF 字体处理器
打开以下站点:
向下滚动时,有两个链接,您可以单击上面的链接下载包含排序代码的项目。 底部只是 DLL,因此您不必下载它。
请展开下载的文件,以便检索内容。
为 WPF 字体处理器创建项目
我想创建 WPF 字体处理器 DLL,该 DLL 适用于"任意 CPU",但在这种情况下,在 XNA 框架的"内容管道扩展库"中创建项目时,只能创建 x86,因此我将从常规类库创建它。
创建项目后,请删除"Class1.cs",因为它不。
然后添加引用。
由于在 WPF 中绘制文本,因此需要与 WPF 相关的引用。 首先,从"框架"到"演示核心"检查。
然后检查"WindowsBase"。 现在,按"确定"按钮确认它,然后再次打开引用管理器。
选择左侧的"浏览",然后单击下面的"浏览"按钮。
打开以下文件夹路径:
- C:\程序文件 (x86)_MSBuild_MonoGame_v3.0_Tools_
从那里,我们将添加两个 DLL:
- MonoGame.Framework.dll
- MonoGame.Framework.Content.Pipeline.dll
确保选中,然后单击"确定"按钮。
查看添加的引用。
然后,从下载的项目中,将 WpfFontPipeline 文件夹中的源代码添加到当前正在编辑的项目。
添加的状态。
确保生成配置为"释放"和"任意 CPU"。
生成并验证是否已成功生成。
确保已创建 DLL。
创建游戏项目
创建 MonoGame 项目。 平台可以是任何内容。
将刚刚创建的 DLL 放在"内容"文件夹中。 DLL 的位置并不重要,但在这种情况下,您需要相对或绝对路径,因此我将暂时留在这里。
打开内容.mgcb,并在选择"内容"时打开"引用"。
• 如果双击"内容.mgcb"时未打开,请从"开始"菜单启动"MonoGame Plipeline"。
在文本框中,键入刚刚创建的 DLL 的文件名,或相对于 Content.mgcb 的路径或绝对路径。
设置后,DLL 尚未反映,因此保存项目后,请关闭 MonoGame 管道,然后重新打开它。
创建子画面字体。 从菜单中选择"编辑">"添加">"新建项目"。
从项目中选择"SpriteFont 描述"以添加它。 (顺便说一下,在添加 SpriteFont 后,我打开 SpriteFont 文件以更改字体名称和大小,以便在运行时更易于查看。
如果选择添加的 SpriteFont,您将看到处理器允许您选择 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"文件。
向下滚动时,目标参数具有颜色信息,因此请直接编辑它。
保存文本后,再次打开并生成 MonoGame 管道。 当你运行它时,你会发现颜色变了。