Как установить размеры камеры так, что-бы картинка отображалась одинаково на разных устройствах?

Рейтинг: 1Ответов: 1Опубликовано: 07.05.2023

Есть приложение на андроид, хочу установить размеры камеры так, что-бы картинка отображалась одинаково на разных устройствах.

Размер картинки 64х64.

Камера:

//В методе render(){
camera = new OrthographicCamera();
    camera.setToOrtho(false, 380, 780);

Сейчас картинка растягивается в ширину или в высоту, зависимо от устройства.

Ответы

▲ 1Принят

Вам следует открыть для себя Viewports. Если кратко, то они позволят выбирать стратегии работы с разным разрешениями и соотношениями сторон. Более подробно все описано в Вики: https://libgdx.com/wiki/graphics/viewports

Ниже пример, основаный на шаблоне приложения, генерируемый gdx-setup

package libgdx;

import com.badlogic.gdx.ApplicationAdapter;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.OrthographicCamera;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.utils.viewport.FitViewport;
import com.badlogic.gdx.utils.viewport.Viewport;

/** {@link com.badlogic.gdx.ApplicationListener} implementation shared by all platforms. */
public class ViewPortExample extends ApplicationAdapter {
    private SpriteBatch batch;
    private Texture image;
    private OrthographicCamera camera;
    private Viewport viewport;

    @Override
    public void create() {
        batch = new SpriteBatch();
        image = new Texture("libgdx.png");
        camera = new OrthographicCamera();
        viewport = new FitViewport(760, 960, camera);
    }

    @Override
    public void render() {
        camera.update();

        Gdx.gl.glClearColor(0f, 0f, 0f, 1f);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

        batch.setProjectionMatrix(camera.combined);

        batch.begin();
        batch.draw(image, 0, 0, 156, 32);
        batch.end();
    }

    @Override
    public void resize (int width, int height) {
        viewport.update(width, height);
    }
    @Override
    public void dispose() {
        batch.dispose();
        image.dispose();
    }
}