Como obtenho um texto pequeno e bonito no XNA sem usar bibliotecas externas?

13

No XNA, a tecnologia spritefont é horrível. O Nuclex faz o trabalho muito melhor, mas não quero ter referências externas e estou quase terminando o jogo.

Ao usar fontes como Sansation ou Quicksand, parece terrível em tamanhos menores das fontes. Isso é tão ruim!

Existe uma solução alternativa conhecida para isso? Tentei definir o tamanho da fonte para extremamente alto e reduzi-lo no spritebatch sem sorte.

Mathias Lykkegaard Lorenzen
fonte
Eu uso o SpriteFont para criar minhas fontes para o XNA, você tem muita flexibilidade. Também asseguro que a posição da fonte seja um número inteiro, para que não ocorra um desalinhamento desagradável, mas essa provavelmente não é uma ótima solução. Você também pode tentar filtrar pontos nas chamadas de spritebatch de texto.
Jonathan Connell
Não se esqueça de testar suas fontes pequenas em uma variedade de dispositivos e pessoas reais. Se é um título 360 e, portanto, tem como alvo TVs, os tamanhos de todos os elementos visuais tendem a precisar ser um pouco maiores do que na tela de um PC.
Lars Viklund
Estou fazendo um jogo para PC, e o tamanho da fonte está definido para um número inteiro.
Mathias Lykkegaard Lorenzen
1
Não dimensione textos, crie uma fonte de sprite para todos os tamanhos que você precisar.
Wouter
1
Mais algumas regras para você aqui. Prenda o vetor de posição em números inteiros antes da renderização; caso contrário, a amostragem fará com que o texto de saída pareça lixo . Pode valer a pena alterar o amostrador de textura para Ponto / Vizinho mais próximo antes de renderizar o texto. Especally se sua fonte é pixelizada :)
Cubed2D

Respostas:

11

O XNA permite importar uma textura como uma fonte de sprite . Provavelmente, é possível obter melhores dicas e suavização de serrilhado na fonte se você colocar cada caractere manualmente em um bom programa de edição de imagens, em vez de confiar na planilha de sprites que o XNA gera.

Tim R.
fonte
13

O processador de fontes XNA sprite usa compactação DXT3 que não funciona bem com o novo alfa pré-multiplicado no XNA 4.0. Daí a aparência de blocos do texto.

O processador de fontes Sprite Nuclex produz exatamente os mesmos dados, exceto que o interno Texture2Dque contém os dados de bitmap da fonte não é compactado - portanto, não há problemas de qualidade.

Como os dados do processador Nuclex estão no mesmo formato, o SpriteFontleitor XNA pode lê-los e você não precisa incluir nenhuma biblioteca Nuclex para distribuição no seu jogo.

(Ele também permite que você use convenientemente o mesmo formato XML que as definições de fonte de sprite nativas do XNA.)

Dito isto: não há nada de errado em agrupar bibliotecas externas com o seu jogo. Não é como se eles fossem instalados no seu sistema ou algo assim. (Você pode ir até o ponto de mesclar as duas assembléias).

E o mesmo vale para o código (se você estiver preocupado com o controle de versão, por exemplo). Você pode simplesmente inserir Nuclex.Fonts.Content.TrueTypeImporter.dllseu código-fonte. Na verdade, não é grande coisa.

Andrew Russell
fonte
9

Você pode usar fontes de pixel :

variante pf tempesta

Quando você usa uma fonte de pixel no tamanho da fonte para a qual ela foi projetada (ou um múltiplo inteiro dela, por exemplo, 2x, 3x, 4x), você garante um texto perfeito em pixel, que não requer anti-aliasing. Isso significa que você nunca precisa lidar com o terrível anti-aliasing que torna as fontes de sprite do XNA tão ruins e o Nuclex muito melhor. ( Este artigo examina esse problema e os compara)

doppelgreener
fonte