Display japonês avançado usando processadores de conteúdo personalizados

Página atualizada :
Data de criação de página :

Sobre a exibição japonesa

O desenho de texto no MonoGame usa SpriteFont, bem como XNA. Para SpriteFont, consulte Exibindo caracteres alfanuméricos e detalhes do estilo de fonte, pois é o mesmo que XNA.

Se você usar o SpriteFont, você deve especificar os caracteres que deseja usar com antecedência. Se são apenas símbolos alfanuméricos, pode ser feito com quase nenhum custo como especificação de personagem e tempo de construção porque é cerca de 100 caracteres, mas quando se trata de japonês, torna-se milhares de caracteres, então o tempo de construção se torna extremamente longo. Se você especificar apenas os caracteres a serem usados, o tempo de compilação pode ser encurtado até certo ponto, mas é problemático especificar o caractere a ser usado ao contrário, e torna-se ainda mais problemático se houver uma mudança no personagem a ser usado.

Em resposta a este problema, o site "Ninari GD"foi personalizado para tornar o desenho japonês em XNA mais suavemente (a propósito, o site-run Yuichi Ito - MSFT é um dos desenvolvedores do XNA Framework). Isso torna mais fácil especificar os caracteres para usar, encurtar o tempo de construção, decorar caracteres e muito mais. Para obter mais informações, consulte o link.

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

No entanto, o "processador de fonte WPF" apresentado na página é para XNA e não pode ser usado como está no MonoGame. Então eu gostaria de portar isso para MonoGame.

Baixe o processador de fontes WPF

Abra os seguintes sites:

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

Role para dois links e clique no link acima para baixar o projeto que contém o código de classificação. O inferior é apenas um DLL, então você não precisa baixá-lo.

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

Por favor, extraia o arquivo baixado para que você possa recuperar o conteúdo.

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

Crie um projeto de processador de fonte WPF

Eu gostaria de criar um DLL de processador de fonte WPF que funcione com "Qualquer CPU", mas por alguma razão quando eu criar um projeto com a "Biblioteca de Extensão de Pipeline de Conteúdo" do XNA Framework, eu só posso criá-lo em x86, então eu vou criá-lo a partir de uma biblioteca de classe regular aqui.

クラス ライブラリの作成

Quando você cria um projeto, você não precisa de "Class1.cs", então exclua-o.

「Class1.cs」の削除

Em seguida, adicione uma referência.

参照の追加

Como você desenha texto no WPF, você precisa de uma referência relacionada ao WPF. Primeiro, confira "PresentationCore" de "Framework".

「PresentationCore」にチェック

Em seguida, verifique "WindowsBase". Agora pressione o botão OK para confirmar e abrir novamente o Gerenciador de Referência.

「WindowsBase」にチェック

Selecione Procurar à esquerda e clique no botão Procurar abaixo.

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

Abra o seguinte caminho da pasta:

  • C:\Arquivos do programa(x86)\MSBuild\MonoGame\v3.0\Ferramentas\

A partir daí, adicione os seguintes dois DLLs:

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

2つの DLL を追加

Certifique-se de que está verificado e clique no botão OK.

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

Revise as referências que foram adicionadas.

追加された参照を確認

Adicione o código-fonte da pasta "WpfFontPipeline" do projeto que você baixou ao projeto que você está editando no momento.

ソースコードを追加

O estado que você adicionou.

追加した状態

Verifique se a configuração de compilação é "Liberação" e "Qualquer CPU".

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

Realize uma compilação para ver se foi construída com sucesso.

ビルド結果

DLL é criado.

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

Crie um projeto de jogo

Crie um projeto para MonoGame. Não importa que plataforma seja.

MonoGame のプロジェクトを作成

Coloque o DLL que você acabou de criar na pasta Conteúdo. Não importa onde o DLL está, mas nesse caso você vai precisar de um caminho relativo ou absoluto, então eu vou deixá-lo aqui por enquanto.

 DLL を Content フォルダに配置

Abra o Content.mgcb e abra referências com conteúdo selecionado.

Se você clicar duas vezes em "Content.mmcb" para não abri-lo, inicie "MonoGame Pipeline" no menu Iniciar.

References を開く

Na caixa de texto, digite o nome do arquivo do DLL que você acabou de criar ou o caminho relativo ou absoluto do Content.mgcb.

Depois de configurá-lo, o DLL ainda não reflete, então uma vez que você salvar o projeto, saia do monoGame Pipeline e o reabre.

DLL のファイル名を入力

Cria uma fonte sprite. Selecione "Editar" >Adicionar→Novo Item do menu.

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

Selecione "SpriteFont Description" entre os itens para adicioná-lo. (Aliás, depois de adicionar o SpriteFont, abri o arquivo SpriteFont para facilitar a leitura na hora da execução e mudei o nome e o tamanho da fonte.)

「SpriteFont Description」を選択

Se você selecionar o SpriteFont que você adicionou, verá que o processador de fonte WPF está disponível no processador.

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

Como cada parâmetro pode ser definido, desta vez eu tentei defini-lo como mostrado na figura por enquanto. Infelizmente, você não pode mudar a cor na versão atual do MonoGame Pipeline.

各パラメータ設定

Tente construir. 6860 caracteres foram construídos porque incluíam até o nível JIS 2. Ainda assim, o tempo é de cerca de nove segundos, então você pode ver que é muito rápido.

ビルド完了

Agora, estamos desenhando usando este SpriteFont, e o código é exatamente o mesmo que XNA. Você pode desenhar texto usando o código introduzido em "Exibir caracteres alfanuméricos" como ele é. Claro, o japonês também é possível.

Eu gostaria de colocar apenas o código que eu adicionei uma vez.

A definição faz parte do campo. "SpriteFont" foi adicionado.

GraphicsDeviceManager graphics;
SpriteBatch spriteBatch;

SpriteFont font;

Carregando e criando dados de fonte no método 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");
}

Desenho com japonês no método 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);
}

Quando executado, o texto é sorteado. É um pouco difícil de entender, mas as letras têm bordas e gradações azuis dentro.

Tornou-se fácil desenhar japoneses assim, e tornou-se possível desenhar o personagem com a decoração.

テキストの描画結果

Finalmente, você não pode alterar a cor da decoração de texto no monoGame Pipeline, mas você pode abrir o arquivo diretamente e modificá-lo.

Depois de salvar e fechar o projeto, abra o arquivo .mccb como um arquivo de texto.

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

Se você rolar para baixo, há informações de cor no parâmetro de destino, então edite-as diretamente lá.

色情報を直接編集

Depois de salvar o texto, abra o monoGame Pipeline novamente e construa-o. Você pode ver que a cor mudou quando você executá-la.

色変更したテキスト