2016-01-24 57 views
0

我有一個類,它看起來是這樣的:LibGDX - 具有靜態最終的Singleton類會導致TextureRegion失敗?

public class MyResources 
{ 

    public static final Size textureSize = new Size(72, 96); 
    public Texture texture; 
    public TextureRegion textureRegion; 

    private static BGRResources instance = null; 

    protected BGRResources() 
    { 
     // Protected to prevent direct instantiation. 

     texture = new Texture(Gdx.files.internal("data/mytex.png")); 
     texture.setFilter(TextureFilter.Linear, TextureFilter.Linear); 

     textureRegion = new TextureRegion(texture, 0, 0, 72, 96); 
     //textureRegion = new TextureRegion(texture, 0, 0, textureSize.width, textureSize.height); 

    } 

    public static MyResources getInstance() 
    { 
     if (instance == null) 
     { 
      instance = new MyResources(); 
     } 
     return instance; 
    } 
} 

大小是一個簡單的類只有公共的寬度和高度浮動。

我想將textureRegion設置的行替換爲它下面的行,將其註釋掉。當我這樣做時,該區域不再有效 - 在圖像中繪製時,我什麼也得不到。上面這行,對我的C編程(即預處理器)大腦應該是完全相同的,工作正常。

爲什麼?我試圖在一個更簡單的非libGDX類中重複這個問題,但是不能。我想也許靜態的最終Size類在它被用來創建textureRegion之前實際上並沒有實例化,但是調試器和我簡化它的嘗試似乎都反駁了這一點。

如上所述,我是一個C人,其中這樣的事情的順序非常清楚。它在我這裏變得很混亂,所以我可以使用任何教育來正確地聲明#define等價物或者可能與答案一起出現的單例類。謝謝。

回答

3

你提到你的Size類有兩個寬度和高度的浮動字段。當你用你的Size類實例化你的TextureRegion時,由於方法重載,它實際上會調用一個單獨的構造函數,而不是傳遞整型常量。這個單獨的構造函數需要將UV座標標準化到0 - 1.0的範圍。查看TextureRegion APITextures section of open.gl瞭解更多詳情。

對於您的用例最簡單的修復方法是在Size類中使用整數而不是浮點數。

+0

謝謝!這至少需要一兩個小時才能解決這個問題。我不會考慮檢查打字,因爲我沒有想到尋找其他構造函數。這是我回到Java時必須記住的事情。非常感謝,先生。 – gkimsey

+0

@gkimsey很高興我可以幫忙!我通常使用Ctrl +點擊我的代碼中的方法名稱(至少在Eclipse中)來確定究竟調用哪一個。 – adketuri