Libgdx:1.8 Windows 8.1 PRO
当超过一定数量的字符时,在这种情况下为51,cpu使用率从稳定的2-3%跃升至超过30%。 更改字体没有任何效果。
public class Main extends ApplicationAdapter {
public GameAssetManager assetManager;
public SpriteBatch batch;
BitmapFont font;
static final String text =
".........." + // 10 characters
".........." +
".........." +
".........." +
".........." +
"."; // add "." and check task manager
@Override
public void create() {
batch = new SpriteBatch();
FreeTypeFontGenerator generator = new FreeTypeFontGenerator(Gdx.files.internal("fonts/Roboto-Medium.ttf"));
FreeTypeFontGenerator.FreeTypeFontParameter parameter = new FreeTypeFontGenerator.FreeTypeFontParameter();
parameter.characters = FreeTypeFontGenerator.DEFAULT_CHARS;
parameter.size = 48;
parameter.color = Color.WHITE;
font = generator.generateFont(parameter);
System.out.println("text length is " + text.length());
}
@Override
public void render() {
Gdx.gl.glClearColor(0, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
batch.begin();
font.draw(batch, text, 0, Gdx.graphics.getHeight() - font.getAscent());
batch.end();
}
}
不幸的是,我没有一个能够准确指出问题的探查器。
编辑:
在这个问题上度过了一段美好的时光之后,我想出了无用的东西 最小的例子:
public class Main extends ApplicationAdapter {
public SpriteBatch batch;
BitmapFont font;
BitmapFontCache fontCache;
static final String text =
".........." + // 10 characters
".........." +
".........." +
".........." +
".........." +
"..";
@Override
public void create() {
batch = new SpriteBatch();
FreeTypeFontGenerator generator = new FreeTypeFontGenerator(Gdx.files.internal("fonts/Roboto-Medium.ttf"));
FreeTypeFontGenerator.FreeTypeFontParameter parameter = new FreeTypeFontGenerator.FreeTypeFontParameter();
parameter.characters = FreeTypeFontGenerator.DEFAULT_CHARS;
parameter.size = 48;
parameter.color = Color.WHITE;
font = generator.generateFont(parameter);
fontCache = font.newFontCache();
fontCache.addText(text, 100, 100);
System.out.println("text length is " + text.length());
}
public void render() {
Gdx.gl.glClearColor(0, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
batch.begin();
fontCache.draw(batch);
batch.end();
}
}
正如我之前所说的,超过一些角色后的表现是可怕的。静态(在运行时不生成)位图字体的情况类似。
由于BitmapFontCache
内部使用Label
,因此此行为也适用于这些类。
欢迎任何见解。