ゲームにスムーズなテキストを入れたい。解決策はピクセルシェーダーであることがわかったので、githubのドキュメントに記載されているようなすべてのことを行います。font.vertファイルとfont.fragファイルがあり、このドキュメントでは、const float Smoothing = 0.25f /(spread * scale)を使用する必要があると述べられています。私のフォントは48ピクセルサイズなので、0.25f / 48.0fを使用しますが、フォントはシャープで不規則です。私は何が間違っていますか?
これはfont.fragです:
#ifdef GL_ES
precision mediump float;
#endif
uniform sampler2D u_texture;
varying vec4 v_color;
varying vec2 v_texCoord;
const float smoothing = 0.25/48.0 ;
void main() {
float distance = texture2D(u_texture, v_texCoord).a;
float alpha = smoothstep(0.5 - smoothing, 0.5 + smoothing, distance);
gl_FragColor = vec4(v_color.rgb, alpha);
}
私はフォントに線形フィルターを使用しています:
arial_white_48.getRegion().getTexture().setFilter(TextureFilter.Linear, TextureFilter.Linear);
テキスト「あなたのスコア」は、ピクセルシェーダーと線形フィルターで書かれています
テキスト「ハイスコア」はリニアフィルターのみで書かれていますが、シャープです
さて、それは8か月前の質問ですが、おそらくあなたはまだ答えに興味を持っています。または、少なくとも同じ問題を抱えている人はそうなるでしょう。
滑らかなフォントにするために、フリータイプのフォントを使用し、ロード画面で作成します。そのためには、資産運用会社が必要です。
通常、私はメインアクティビティでアセットマネージャーを作成します。
public class MyGdxGame extends Game implements ApplicationListener {
public SpriteBatch batch;
public AssetManager assets;
@Override
public void create () {
batch = new SpriteBatch();
assets = new AssetManager();
this.setScreen(new LoadingScreen(this));
}
@Override
public void render () {
super.render();
}
}
そして、ロード画面で、.ttfファイルに基づいて任意のサイズのフォントを作成します。
public class LoadingScreen implements Screen{
final MyGdxGame game;
public LoadingScreen(final MyGdxGame gam){
game = gam;
FileHandleResolver resolver = new InternalFileHandleResolver();
game.assets.setLoader(FreeTypeFontGenerator.class, new FreeTypeFontGeneratorLoader(resolver));
game.assets.setLoader(BitmapFont.class, ".ttf", new FreetypeFontLoader(resolver));
FreeTypeFontLoaderParameter size1Params = new FreeTypeFontLoaderParameter();
size1Params.fontFileName = "Fonts/calibri.ttf";
size1Params.fontParameters.genMipMaps = true;
size1Params.fontParameters.minFilter = TextureFilter.Linear;
size1Params.fontParameters.magFilter = TextureFilter.Linear;
size1Params.fontParameters.size = Gdx.graphics.getWidth()/18;
game.assets.load("font1.ttf", BitmapFont.class, size1Params);
FreeTypeFontLoaderParameter size2Params = new FreeTypeFontLoaderParameter();
size2Params.fontFileName = "Fonts/calibri.ttf";
size2Params.fontParameters.genMipMaps = true;
size2Params.fontParameters.minFilter = TextureFilter.Linear;
size2Params.fontParameters.magFilter = TextureFilter.Linear;
size2Params.fontParameters.size = Gdx.graphics.getWidth()/6;
game.assets.load("font2.ttf", BitmapFont.class, size2Params);
}
}
この方法を使用すると、任意のサイズの非常に滑らかなフォントを作成できます。それらをスムーズにする秘訣は、次の3行にあります。
size2Params.fontParameters.genMipMaps = true;
size2Params.fontParameters.minFilter = TextureFilter.Linear;
size2Params.fontParameters.magFilter = TextureFilter.Linear;
最後に、フォントの1つを使用する必要がある場合は、次を使用する必要があります。
game.assets.get("font1.ttf", BitmapFont.class)
フォントの名前に注意してください。この例で作成した2つのフォント、font1
およびfont2
では、単一の.ttfファイルを使用しましたcalibri.ttf
が、コードで作成したフォントを呼び出すときは、そのような.ttfファイルがない場合でも、font1.ttf
またはを呼び出す必要がありfont2.ttf
ます。資産。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加