代码之家  ›  专栏  ›  技术社区  ›  bebosh

在libgdx中缩放相机不保存尺寸

  •  1
  • bebosh  · 技术社区  · 7 年前

    我想在我的应用程序中使用地图,并使用 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;
        }
    
    
    
    }
    

    它正在正确缩放,但当我触摸并再次尝试缩放时,它将从scale=1开始缩放。 如何缩放凸轮并保存其状态?

    1 回复  |  直到 7 年前
        1
  •  0
  •   Stampler    7 年前

    我没有任何使用libgdx缩放的经验,但是一个想法是保存 initialDistance 在变量中使用它,而不是使用原始变量(第一次获得初始值时除外)。

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

    如果这没有帮助,请阅读 docs 或者调查一下 source code 可以给你个主意。