Display japonês avançado usando processadores de conteúdo personalizados
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.
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:
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.
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".
Em seguida, verifique "WindowsBase". Agora pressione o botão OK para confirmar e abrir novamente o Gerenciador de Referência.
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
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".
Realize uma compilação para ver se foi construída com sucesso.
DLL é criado.
Crie um projeto de jogo
Crie um projeto para MonoGame. Não importa que plataforma seja.
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.
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.
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.
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.)
Se você selecionar o SpriteFont que você adicionou, verá que o processador de fonte WPF está disponível no processador.
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.
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.