根据libgdx中的屏幕大小拟合背景以获得两个方向

时间:2014-08-21 15:14:59

标签: android libgdx live-wallpaper

我正在使用libgdx扩展创建livewallpaper。我正在为1024 * 1024的图像大小添加背景。它在所有设备中都能正常工作,但是当主屏幕的方向发生变化时,它会在平板电脑中正常工作。我在冲浪时找到了许多解决方案,以便在onResize方法上调整大小。我尝试了所有这些,但没有一个能为我工作。

如果有人使用libgdx面对并解决了这个带背景的动态壁纸问题,请指导我应该实现的目标。我已经粘贴了我现在已经实现的代码:

Oncreate method:
textureBG = new Texture(Gdx.files.internal("data/background_1.jpg"));
        sprite = new Sprite(textureBG);
camera = new OrthographicCamera();
        camera.viewportHeight = 1024;
        camera.viewportWidth = 1024;

        camera.position.set(camera.viewportWidth * .5f,
                camera.viewportHeight * .5f, 0f);
        camera.update();
        fpsLog = new FPSLogger();
        stage = new Stage(new FillViewport(Gdx.graphics.getWidth(),
                Gdx.graphics.getHeight(), camera));

使用texturebg渲染方法:

batch.begin();
        sprite.setSize(Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
        sprite.draw(batch);

1 个答案:

答案 0 :(得分:1)

您的问题是您将相机设置为正方形,总是1024x1024。当它与精灵批处理一起使用时,它会扭曲正方形以适合屏幕。因此,我猜测你是这样开发的,并最终以相反的方式使你的精灵变形,以弥补失真。

调整大小时需要做什么:

void resize(int width, int height){
    camera.viewportWidth = width;
    camera.viewportHeight = height;
    //you can move it to whatever position you want here
    camera.update();
}

然后在您的其他代码中,相应地缩放和移动您的精灵。它们不应该被扭曲。

修改 根据您的评论,您希望背景始终填满屏幕:

您可以使用FillViewport获得所需的效果。

create中,在实例化相机后,您可以通过裁剪掉额外的内容来实例化视口以适应1024x1024的方格以覆盖整个屏幕:

viewport = new FillViewport(1024, 1024, camera);

然后你需要在resize方法中调整它的大小:

@Override
void resize(int width, int height){
    camera.position.set(512, 512, 0); //seems to be where you want it.
    viewport.update(width, height, false); 
}

视口负责为您更新相机。如果您在render中更改其位置,则只需手动更新相机。