如何在libgdx中避免GlyphLayout的异常以在运行时获取String的宽度?

时间:2018-04-19 13:31:52

标签: java libgdx

我正在使用libgdx的1.9.8版本。我使用GlyphLayout来计算我在运行时使用BitmapFont绘制的字符串的宽度。我需要宽度使文本相对于用精灵绘制的线条居中。

private BitmapFont tickMarkFont;
private GlyphLayout tickGlyphLayout = new GlyphLayout();

tickMarkFont = manager.get("size16.ttf", BitmapFont.class);

private float getTickLabelSize(String text) {
        tickGlyphLayout.setText(tickMarkFont, text);
        return tickGlyphLayout.width;
}

但是,我使用此类获得了多个异常。由于setText上的空指针异常,我偶尔会崩溃:

... java.lang.NullPointerException:
at com.badlogic.gdx.graphics.g2d.GlyphLayout.setText(GlyphLayout.java:141)
at com.badlogic.gdx.scenes.scene2d.ui.Label.layout(Label.java:202)
at com.badlogic.gdx.scenes.scene2d.ui.Widget.validate(Widget.java:88)
at com.badlogic.gdx.scenes.scene2d.ui.Table.layout(Table.java:785)
at com.badlogic.gdx.scenes.scene2d.ui.WidgetGroup.validate(WidgetGroup.java:115)
at com.badlogic.gdx.scenes.scene2d.ui.Button.draw(Button.java:198)
at com.badlogic.gdx.scenes.scene2d.ui.TextButton.draw(TextButton.java:83)
at com.badlogic.gdx.scenes.scene2d.Group.drawChildren(Group.java:110)
at com.badlogic.gdx.scenes.scene2d.Group.draw(Group.java:57)
at com.badlogic.gdx.scenes.scene2d.Group.drawChildren(Group.java:110)
at com.badlogic.gdx.scenes.scene2d.Group.draw(Group.java:57)
at wall.mcv.actors.Scatterplot.draw(Scatterplot.java:379)

由于IllegalStateException: Array is empty,同样的方法有时也会崩溃。

图纸有时会崩溃:

tickMarkFont.draw(batch, tickGlyphLayout, x, y);

我一直在绘制文本,崩溃只是偶然的,所以很难调试它。
我发现了一个类似的问题:(Libgdx 1.6.1) BitmapFontCache.draw crashing due to index out of bounds

...但这并没有帮助,因为我的字符串只有1行。它们通常是数字。

有什么想法吗?

0 个答案:

没有答案