我有一堂课,看起来像这样:

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 APITextures section of open.gl以获得更多详细信息。

对于您的用例,最简单的解决方法是在您的Size类中使用int而不是float。

关于java - LibGDX-具有静态最终值的Singleton类会导致TextureRegion失败?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34981797/

10-10 19:30