【问题标题】:android libgdx bitmap fonts turn to black rectangles after a while一段时间后,android libgdx位图字体变成黑色矩形
【发布时间】:2013-11-21 10:47:18
【问题描述】:

我在 android 中使用 gdx-freetype 库从 assets/fonts/arial.ttf 中的 TrueType 字体生成 BitmapFont 这是我用来在屏幕上显示一些文本的方式

generator = new FreeTypeFontGenerator(Gdx.files.internal("fonts/arial.ttf"));
font30 = generator.generateFont(60 , "ConectigTsrv" , false);
generator.dispose();    
Label l = new Label("Connecting to server...", new LabelStyle(font30 , Color.BLUE));
l.setX(400 - l.getWidth()/2f);
l.setY(480 - l.getHeight() - 10);
stage.addActor(l);

文本将很好地打印到屏幕上

但是过了一会儿或者当我按下主页按钮然后回到应用程序时,所有字符都变成黑色矩形

知道发生了什么吗?

【问题讨论】:

  • 我会做一个调试,看看当你按下任何按钮时会发生什么
  • 我想是位图的错

标签: android libgdx bitmap-fonts


【解决方案1】:

问题是直到最近的commit 才管理由 FreeTypeFontGenerator 创建的纹理。纹理不受管理这一事实意味着它们必须在丢失 OpenGL 上下文后重新加载,这种情况发生在您所描述的场景中。

如果您将 libgdx 升级到 latest nightlies,那么问题可能会消失。

有关更多信息,this article 很好地描述了非托管纹理的问题。

【讨论】:

  • yesssss 我昨晚用的build,一切都很好。我刚看了你提到的文章,谢谢。但是我使用的版本是0.9.9。这个版本之后提交是不是?
【解决方案2】:

如果有人仍然有这个问题。使用 LibGDX 1.9.2,我也遇到了这个问题: 运行游戏,导航“返回”到 Android 主屏幕,返回游戏,字体将变为黑色矩形。

原来我是以静态方式加载所有纹理,只在游戏开始时加载一次,再也不会加载:

//THIS IS WRONG
public class Styles {
    public static final BitmapFont HEADER_FONT;
    public static final FreeTypeFontGenerator _freeTypeFontGenerator = ...

    static {
        FreeTypeFontGenerator.FreeTypeFontParameter params = ...
        HEADER_FONT = freeTypeFontGenerator.generateFont(params);
    }
}

当游戏在内存中重新加载时,这会导致问题。据我了解,最终字段现在指的是不存在的纹理数据。为了解决这个问题,我去掉了最终属性并将它们加载到 create() 函数中,每次将游戏重新加载到内存中时都会重新创建所有资产:

public void onCreate() {
    Styles.loadAssets();
}

在风格方面:

//STATIC RESOURCES CAN CAUSE TROUBLE, KEEP IT IN MIND
public class Styles {
    public static BitmapFont HEADER_FONT;
    public static FreeTypeFontGenerator FONT_GENERATOR = ...

    public static void loadAssets() {
        FreeTypeFontGenerator.FreeTypeFontParameter params = ...
        HEADER_FONT = FONT_GENERATOR.generateFont(params);
    }
}

我更喜欢我的只读资产是静态的以便内存友好。但是,使用静态资源可能仍然会产生我不知道的问题,如per the manual

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-05
    • 1970-01-01
    • 1970-01-01
    • 2019-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多