异常通过加载TTF字体到AssetManager
问题描述:
Follwing此代码例如:https://github.com/libgdx/libgdx/blob/master/tests/gdx-tests/src/com/badlogic/gdx/tests/extensions/FreeTypeFontLoaderTest.java异常通过加载TTF字体到AssetManager
我试图一个单一TTF文件加载到AssetManager使用不同的参数和不同的文件名。
public class LoadingScreen implements Screen {
private final GdxAsternets game;
private float progress;
public LoadingScreen(final GdxAsternets game){
this.game = game;
game.bitmapFont = new BitmapFont(Gdx.files.internal("font/myFont.fnt"));
queueAssets();
}
@Override
public void show() {
progress = 0f;
}
@Override
public void render(float delta) {
Gdx.gl.glClearColor(0, 0, 0, 0);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
update(delta);
}
private void update(float delta){
progress = MathUtils.lerp(progress, game.assetManager.getProgress(), 0.1f);
if(game.assetManager.update() && progress >= game.assetManager.getProgress()- 0.1f){
game.setScreen(game.menuScreen);
}
}
private void queueAssets(){
//Fontloader/Filehandler
FileHandleResolver resolver = new InternalFileHandleResolver();
game.assetManager.setLoader(FreeTypeFontGenerator.class, new FreeTypeFontGeneratorLoader(resolver));
game.assetManager.setLoader(BitmapFont.class, ".ttf", new FreetypeFontLoader(resolver));
//load timer font
FreetypeFontLoader.FreeTypeFontLoaderParameter smallFontParams = new FreetypeFontLoader.FreeTypeFontLoaderParameter();
smallFontParams.fontFileName = "font/Montserrat-SemiBold.ttf";
smallFontParams.fontParameters.size = 40;
game.assetManager.load("smallFont.ttf", BitmapFont.class, smallFontParams);
//load game msg font
FreetypeFontLoader.FreeTypeFontLoaderParameter bigFontParams = new FreetypeFontLoader.FreeTypeFontLoaderParameter();
smallFontParams.fontFileName = "font/Montserrat-SemiBold.ttf";
smallFontParams.fontParameters.size = 85;
game.assetManager.load("bigFont.ttf", BitmapFont.class, bigFontParams);
}
/**Overring methods...*/
}
在方法queueAssets()查找。引用上面的链接:“字体的名称是任意的,并且不指向文件磁盘”。我已经将生成的字体命名为“bigFont.ttf”和“smallFont.ttf”,但它无法加载资源。这里的问题不在于ttf字体的错误文件路径。 我利用了
game.assetManager.load("font/Montserrat-SemiBold.ttf", BitmapFont.class, smallFontParams);
,而不是
game.assetManager.load("smallFont.ttf", BitmapFont.class, smallFontParams);
之前,它似乎做工精细这样做是矛盾作出上述陈述。
更新(float delta)方法抛出异常,而game.assetManager.update()被称为。
例外:
GdxRuntimeException: com.badlogic.gdx.utils.GdxRuntimeException: Error reading file: null (Internal)
at com.bitbench.asternets.Screen.LoadingScreen.update(LoadingScreen.java:84)
at com.bitbench.asternets.Screen.LoadingScreen.render(LoadingScreen.java:67)
答
我用了几天要弄清楚这个问题,但这里的人谁也面临同样的问题的答案:
FreetypeFontLoader.FreeTypeFontLoaderParameter smallFontParams = new FreetypeFontLoader.FreeTypeFontLoaderParameter();
smallFontParams.fontFileName = "font/Montserrat-SemiBold.ttf";
smallFontParams.fontParameters.size = 40;
game.assetManager.load("smallFont.ttf", BitmapFont.class, smallFontParams);
FreetypeFontLoader.FreeTypeFontLoaderParameter bigFontParams = new FreetypeFontLoader.FreeTypeFontLoaderParameter();
smallFontParams.fontFileName = "font/Montserrat-SemiBold.ttf";
smallFontParams.fontParameters.size = 85;
game.assetManager.load("bigFont.ttf", BitmapFont.class, bigFontParams);
使用相同的FreeTypeFontLoaderParameter并改变其参数来创建一个字体会导致你的异常。因此,请使用不同的FreeTypeFontLoaderParameter以创建具有不同参数的字体!正确的代码应该是:
FreetypeFontLoader.FreeTypeFontLoaderParameter smallFontParams = new
FreetypeFontLoader.FreeTypeFontLoaderParameter();
smallFontParams.fontFileName = "font/Montserrat-SemiBold.ttf";
smallFontParams.fontParameters.size = 40;
game.assetManager.load("smallFont.ttf", BitmapFont.class, smallFontParams);
FreetypeFontLoader.FreeTypeFontLoaderParameter bigFontParams = new FreetypeFontLoader.FreeTypeFontLoaderParameter();
bigFontParams.fontFileName = "font/Montserrat-SemiBold.ttf";
bigFontParams.fontParameters.size = 85;
game.assetManager.load("bigFont.ttf", BitmapFont.class, bigFontParams);
确保文件名和路径的文件是正确的,**的Android的文件系统是大小写敏感的** – Aryan
前面已经说了我的文件的路径是正确的。如果它是一个小问题,我不会问stackoverflow。 –