Well, it's an 8 months old question, but maybe your are still interested in the answer. Or at least someone with the same problem will be.
To have smooth fonts, I use free type fonts, and I create them in my loading screen. For that you need an asset manager.
Usually I create my asset manager in my main activty :
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();
}
}
And in the loading screen I create the fonts with any size, based on a .ttf file :
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);
}
}
With this method you can create very smooth font of any size.
The trick to make them smooth is in these 3 lines :
size2Params.fontParameters.genMipMaps = true;
size2Params.fontParameters.minFilter = TextureFilter.Linear;
size2Params.fontParameters.magFilter = TextureFilter.Linear;
Finally, when you need to use one of your font, you need to use :
game.assets.get("font1.ttf", BitmapFont.class)
Be careful with the name of your fonts. For the 2 fonts that I created in this example, font1
and font2
, I used a single .ttf file that is calibri.ttf
, but when I call the created fonts in my code I need to call font1.ttf
or font2.ttf
, even if there are no such .ttf files in my asset.