我正在使用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);
答案 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
中更改其位置,则只需手动更新相机。