如何在LibGDX中将图片作为背景加载?

4

我制作动态壁纸时遇到了一个问题。我想将图片设置为背景,但Eclipse显示错误:

01-10 10:37:18.206: E/AndroidRuntime(1045): FATAL EXCEPTION: GLThread 99
01-10 10:37:18.206: E/AndroidRuntime(1045): com.badlogic.gdx.utils.GdxRuntimeException: Texture width and height must be powers of two: 480x800

我的代码如下:

public class Tapeta implements ApplicationListener {


    private SpriteBatch batch;
    private Texture texture;
    private TextureRegion region;


    @Override
    public void create() {      
        texture = new Texture(Gdx.files.internal("data/cat.jpg"));
        Texture.setEnforcePotImages(false); 

    }

    @Override
    public void dispose() {
        texture.dispose();
    }

    @Override
    public void render() {
        Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT); 
        batch.begin();
        batch.draw(texture, 0, 0);
        batch.end();
    }

    @Override
    public void resize(int width, int height) {
    }

    @Override
    public void pause() {
    }

    @Override
    public void resume() {
    }
}

我正在寻找解决我的问题的方法,但是没有找到。

1个回答

5
在这种情况下,libGDX的错误信息实际上是有帮助的!
Texture width and height must be powers of two: 480x800

所以纹理的宽度和高度必须是以下之一:2、4、8、16、32、64、128、256、512、1024、2048(其中480和800都不在此列表中...)
您有这个神奇的代码行:
Texture.setEnforcePotImages(false);

但这应该在纹理被加载后进行。如果将其放在纹理加载之前,异常是否会消失?(在您的问题中包含更多的异常回溯信息将有助于解决问题)。我认为此方法仅适用于您知道基础OpenGL ES 1.0系统支持非二次幂纹理扩展的情况。设置此标志不会修复真正不支持二次幂纹理的硬件。(我不知道现在世界上还剩下多少这样的硬件,所以现在可能是无害的。)

二次幂纹理要求是硬件和OpenGL ES的限制。这个要求从OpenGL ES 2.0中删除了。

另一种绕过这个要求的方法是构建一个二次幂大小的纹理集,其中包含您的非二次幂纹理。然后渲染图集图像的子部分。参见http://bitiotic.com/blog/2012/05/10/tutorial-for-texturepacker-and-libgdx/


对我来说,我必须使用 GLTexture.setEnforcePotImages(false); - Mikaël Mayer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接