1

私はモノゲームが初めて.spritefontで、選択したフォントで文字列を描画するためにファイルを作成しようとしています。

英字の文字列は画面にうまく表示されますが、日本語や中国語など、複数の言語で文字列を描画したいと考えています。

というわけで、多言語フォント「Microsoft JhengHei」の全文字を読み込んでみました。

フォントの最初の文字は!(U+0021)で、最後の文字は です○(U+FFEE)

しかし、プログラムをコンパイルしようとすると、コンパイラはエラーを出しました:

.../Content/MyFont.spritefont: エラー: インポーター 'FontDescriptionImporter' で予期しないエラーが発生しました!

System.Reflection.TargetInvocationException: 呼び出しのターゲットによって例外がスローされました。---> System.ArgumentException: CharacterRegion.End は CharacterRegion.Start より大きくなければなりません

Microsoft.Xna.Framework.Content.Pipeline.Graphics.FontDescription.set_CharacterRegions (CharacterRegion [] 値) で

そして、 を に変更する○忮MSBuildスタックしてコンテンツを進めるのに永遠に時間がかかります。

以下のコードMyFont.spritefont

<?xml version="1.0" encoding="utf-8"?>
<XnaContent xmlns:Graphics="Microsoft.Xna.Framework.Content.Pipeline.Graphics">
  <Asset Type="Graphics:FontDescription">
    <FontName>Microsoft JhengHei</FontName>
    <Size>14</Size>
    <Spacing>0</Spacing>
    <UseKerning>true</UseKerning>
    <Style>Regular</Style>
    <CharacterRegions>
      <CharacterRegion>
        <Start>&#x0021;</Start>
        <End>&#xFFEE;</End>
      </CharacterRegion>
    </CharacterRegions>
  </Asset>
</XnaContent>

私は数日間解決策を探しましたが、役に立ちませんでした。

4

2 に答える 2

1

65,000 文字すべてを処理するには時間がかかりすぎます。使用している文字のみを処理する必要があります。

したがって、最も簡単な方法は、いくつかのファイルMonoGame Custom Content Pipelineで使用している文字を作成してロードすることです。.resx

この解決策を探すのにとても時間がかかりました。だから私はどのように成功したかを投稿します.将来同じ質問をする人に役立つことを願っています.

ステップバイステップのチュートリアル

  1. クラス ライブラリを作成します。

  2. MonoGame.Framework.Content.Pipeline.Portableを使用してパッケージを参照しますNuGet。(チェックボックスにチェックを入れてくださいInclude Prerelease)

  3. LocalizationSample こちらからダウンロードし、ファイルを解凍してください。

  4. LocalizationPipeline\コピーの下LocalizedFontDescription.csLocalizedFontProcessor.csクラス ライブラリに

  5. ファイルを出力するようにクラス ライブラリをビルドしLocalizationPipeline.dllます。

  6. アセット タイプを開いMyfont.spritefontて変更します。LocalizationPipeline.LocalizedFontDescription

  7. 次に、リソースを追加し<ResourceFiles><Resx>..\strings.resx</Resx></ResourceFiles>ます (これらのファイルには、描画する文字列が含まれている必要があります)。

  8. 開いContent.mgcb て参照するLocalizationPipeline.dll

  9. のプロセッサMyFont.spritefontLocalizedFontProcessor

  10. プロジェクトを再ビルドします。

MyFont.spritefont

<?xml version="1.0" encoding="utf-8"?>
<XnaContent xmlns:Graphics="Microsoft.Xna.Framework.Content.Pipeline.Graphics">
  <Asset Type="LocalizationPipeline.LocalizedFontDescription">
    <FontName>Microsoft JhengHei</FontName>
    <Size>14</Size>
    <Spacing>0</Spacing>
    <UseKerning>true</UseKerning>
    <Style>Regular</Style>
    <CharacterRegions>
      <CharacterRegion>
        <Start>&#32;</Start>
        <End>&#126;</End>
      </CharacterRegion>
    </CharacterRegions>
    <ResourceFiles>
      <Resx>..\strings.resx</Resx>
    </ResourceFiles>
  </Asset>
</XnaContent>

コンテンツ.mgcb

...
#-------------------------------- References --------------------------------#

/reference:..\LocalizationPipeline.dll

#---------------------------------- Content ---------------------------------#
...
#begin MyFont.spritefont
/importer:FontDescriptionImporter
/processor:LocalizedFontProcessor
/build:MyFont.spritefont
...

ソース

  1. MonoGame パイプライン用のカスタム コンテンツ インポーターの作成のパート 1

  2. 方法: ローカライズされたゲームを作成する

  3. LocalizationSample (このリンクを提供してくれた @Groo に感謝します。)

于 2016-02-09T18:57:00.690 に答える