Scale camera in libGDX not save dimensions

I want to use map in my app and do move, scale and rotation on it using libGDX library, I'm using this code to scale camera in 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;
    }



}

It is zooming correctly, but when I touch up and try to zoom again it begin zoom from scale = 1. How can zoom the cam and save its status?

1 answer

  • answered 2018-11-08 14:07 Stampler

    I don't have any experience in zooming with LibGDX, but an idea would be saving the initialDistance in a variable and use it instead of the original one (expect for the first time to get the initial value).

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

    If this doesn't help, reading the docs or looking into the source code could give you an idea.