Масштаб камеры в libGDX не сохраняет размеры - PullRequest
0 голосов
/ 08 ноября 2018

Я хочу использовать карту в своем приложении и перемещать, масштабировать и вращать ее, используя библиотеку libGDX, я использую этот код для масштабирования камеры в Android:

public class MyGdxGame extends ApplicationAdapter implements GestureDetector.GestureListener {
    SpriteBatch batch;
    Texture texture;
    Sprite sprite;
    OrthographicCamera camera;

    @Override
    public void create() {
        batch = new SpriteBatch();

        camera = new OrthographicCamera(Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
        texture = new Texture(Gdx.files.internal("map.jpg"));
        sprite = new Sprite(texture);
        sprite.setPosition(-sprite.getWidth() / 2, -sprite.getHeight() / 2);

        Gdx.input.setInputProcessor(new GestureDetector(this));
    }

    @Override
    public void render() {
        Gdx.gl.glClearColor(1, 1, 1, 1);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
        camera.update();
        batch.setProjectionMatrix(camera.combined);
        batch.begin();
        sprite.draw(batch);
        batch.end();
    }

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

    @Override
    public boolean pan(float x, float y, float deltaX, float deltaY) {
        camera.translate(-deltaX, deltaY);
        return false;
    }


    @Override
    public boolean zoom(float initialDistance, float distance) {
        float scale = initialDistance / distance;
        camera.zoom = scale;
        return false;
    }



}

Это масштабирование корректно, но когда я поднимаю и пытаюсь снова увеличить масштаб, начинается масштабирование от масштаба = 1. Как можно увеличить камеру и сохранить ее статус?

1 Ответ

0 голосов
/ 08 ноября 2018

У меня нет никакого опыта в масштабировании с помощью LibGDX, но идея заключается в том, чтобы сохранить initialDistance в переменной и использовать его вместо исходного (ожидайте, что в первый раз получите начальное значение).

@Override
public boolean zoom(float initialDistance, float distance) {
    if(savedDistance == 0)
        savedDistance = initialDistance

    float scale = savedDistance / distance;
    camera.zoom = scale;
    return false;
}

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

...