外部ライブラリを使用せずにXNAで美しい小さなテキストを取得するにはどうすればよいですか?


13

XNAでは、スプライトフォント技術は恐ろしいものです。Nuclexの方がはるかに優れていますが、外部からの参照は必要ありません。また、ゲームはほぼ完成しました。

SansationやQuicksandなどのフォントを使用する場合、フォントのサイズが小さいとひどく見えます。それはとても悪いです!

これに対する既知の回避策はありますか?フォントサイズを非常に高く設定し、スプライトバッチでそれらを不運に縮小しようとしました。


私が使用SpriteFontを XNAのための私のフォントを作成するには、柔軟性がたくさんあります。また、厄介なアンチエイリアスが発生しないように、フォントの位置が整数であることを確認しますが、これはおそらく素晴らしい解決策ではありません。テキストスプライトバッチ呼び出しでもポイントフィルタリングを試すことができます。
ジョナサンコネル

さまざまな実際のデバイスや人で小さなフォントをテストすることを忘れないでください。360タイトルでテレビをターゲットにしている場合、すべての視覚要素のサイズはPC画面よりもかなり大きくする必要がある傾向があります。
ラースヴィクルンド

私はPCゲームをやっていて、フォントサイズは整数に設定されています。
マティアスリュックガードローレンツェン

1
テキストを拡大縮小せず、必要なサイズごとにスプライトフォントを作成します。
-Wouter

1
ここであなたのためのいくつかのルール。レンダリングする前に位置ベクトルを整数に固定します。そうしないと、サンプリングにより出力テキストがゴミに見えます。テキストをレンダリングする前に、テクスチャサンプラーをPoint / Nearest Neighborに変更する価値があるかもしれません。特にフォントがピクセル化されている場合:)
Cubed2D

回答:



13

XNAスプライトフォントプロセッサはDXT3圧縮を使用しますが、XNA 4.0の新しい事前乗算されたアルファではうまく機能しません。したがって、テキストのブロック状の外観。

Nuclexスプライトフォントプロセッサまったく同じデータを出力Texture2Dしますが、フォントビットマップデータを保持する内部は圧縮されないため、品質の問題はありません。

Nuclexプロセッサからのデータは同じ形式であるため、XNA SpriteFontリーダーはそれを読み取ることができ、ゲームで配布するためにNuclexライブラリを含める必要はありません。

(また、XNAのネイティブスプライトフォント定義と同じXML形式を便利に使用できます。)

つまり、外部ライブラリをゲームにバンドルしても何も問題はありません。システムなどにインストールされるわけではありません。(2つのアセンブリをマージすることもできます)。

また、コードにも同じことが言えます(たとえば、バージョン管理が心配な場合)。Nuclex.Fonts.Content.TrueTypeImporter.dllソースコードを入力するだけです。実際には大したことではありません。


9

ピクセルフォントを使用できます

pf tempestaバリアント

ピクセルフォントを設計されたフォントサイズ(または2x、3x、4xなどの整数倍)で使用すると、アンチエイリアスを必要としないピクセル完全なテキストが保証されます。これは、XNAのスプライトフォントを非常に悪くし、Nuclexを非常に優れたものにするひどいアンチエイリアシングに対処する必要がないことを意味します。(この記事ではその問題を調べて比較します)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.