我有一堂课,看起来像这样:
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 API和Textures section of open.gl以获得更多详细信息。
对于您的用例,最简单的解决方法是在您的Size类中使用int而不是float。
关于java - LibGDX-具有静态最终值的Singleton类会导致TextureRegion失败?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34981797/