2013-11-21 35 views
2

我使用GDX-FreeType的圖書館在android系統生成BitmapFont從TrueType字體這是在資產/字體/ ARIAL.TTF 這是以後的路我使用在屏幕上顯示一些文字安卓libgdx位圖字體變成黑色矩形一會兒

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); 

文本將被打印到屏幕很好

enter image description here

但是,一段時間後,或當我按下Home鍵,然後再回來到應用程序的所有字符變成黑色矩形

enter image description here

任何想法關於怎麼回事?

+1

我會做一個調試,以確切地看到當你按下任何按鈕時會發生什麼 –

+1

我想它是位圖的錯 –

回答

4

問題是由FreeTypeFontGenerator創建的紋理直到最近commit才被管理。紋理不受管理的事實意味着,在OpenGL上下文丟失之後,必須重新加載紋理,這種情況發生在您描述的場景中。

如果您升級libgdx到latest nightlies那麼問題可能會消失。

有關更多信息,非託管紋理的問題在this article中描述得非常好。

+0

yesssss我昨晚使用的構建和一切都很好。我只是讀了你提到的文章謝謝you.but我使用的版本是0.9.9.Commit是在這個版本之後完成的嗎? –

1

如果有人仍然有這個問題。使用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); 
    } 
} 

這會導致麻煩,當遊戲在內存中加載。據我所知,最後的字段現在指的是不存在的紋理數據。爲了解決這個問題,我擺脫了最終性能,並在創建()函數加載它們,重新創建每個遊戲在內存中重新加載時間的所有資產:

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

+0

這是我的問題,謝謝! –