簡體   English   中英

LibGDX-具有靜態最終狀態的Singleton類會導致TextureRegion故障?

[英]LibGDX - Singleton class with static final causes TextureRegion failure?

我有一堂課,看起來像這樣:

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

Size是一個簡單的類,僅具有公共寬度和高度浮點數。

我想替換將textureRegion設置為其下方的行的行,該行已被注釋掉。 當我這樣做時,該區域不再起作用-當在圖像中繪制該區域時,我什么也沒得到。 上面的代碼行對我的C編程(即預處理程序)的大腦應該是完全相同的,可以正常工作。

為什么? 我嘗試在一個更簡單的非libGDX類中復制問題,但是沒有。 我以為靜態的最終Size類實際上沒有在用於創建textureRegion之前實例化,但是調試器和我試圖簡化它的嘗試似乎都無法證明這一點。

如上所述,我是C家伙,這種事情的順序很清楚。 這對我來說很泥濘,因此我可以接受任何有關如何正確聲明可能與答案一起出現的#define等效項或單例類的教育。 謝謝。

您提到您的Size類具有兩個用於寬度和高度的浮點字段。 當您使用Size類實例化TextureRegion時,由於方法重載,與傳遞整數常量相比,它實際上調用了單獨的構造函數。 該單獨的構造函數期望將UV坐標標准化為0-1.0的范圍。 有關更多詳細信息,請檢查TextureRegion APIopen.glTextures部分

對於您的用例,最簡單的解決方法是在您的Size類中使用int而不是float。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM