LibGDX - 翻译相机时屏幕上没有任何变化

时间:2015-01-07 04:30:31

标签: java android camera libgdx gestures

我正在使用GestureListener尝试创建一个平移菜单,但即使相机的坐标正在更改并且它正在更新,也没有任何动作。我想这可能是因为舞台是相对于相机绘制的,但我不确定如何改变它。

我是如何做到的:

camera = new OrthographicCamera(Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
...
gesture = new GestureDetector(this);
        InputMultiplexer im = new InputMultiplexer();
        im.addProcessor(gesture);
        im.addProcessor(stage);

        Gdx.input.setInputProcessor(im);
} //end initialization of CustomizeScreen

public void render(float delta) {
        Gdx.gl.glClearColor(0.2f, 0.2f, 0.2f, 1);
        Gdx.gl.glClear(GL30.GL_COLOR_BUFFER_BIT);
        stage.act(Math.min(Gdx.graphics.getDeltaTime(), 1 / 60f));  //0, 18, 31 for layer style
        stage.draw();
        Table.drawDebug(stage);

        batch.setProjectionMatrix(camera.combined);

        g.batch.begin();
        g.font.setScale(2);
        g.font.setColor(Color.WHITE);
        g.font.draw(g.batch, "Coins: " + Filer.getCoins(), 15, Gdx.graphics.getHeight() - 15);
        g.font.draw(g.batch, message, 0, 150);
        g.batch.end();

        camera.update();
}
...
    @Override
    public boolean pan(float x, float y, float deltaX, float deltaY) {
        message = "Pan, delta:" + Float.toString(deltaX) +
                "," + Float.toString(deltaY);
        camera.translate(deltaX, 0, 0);
        camera.update();
        return false;
    }

我已经在更新方法中检查了相机坐标(camera.position.x),所以我知道它实际上正在改变某些东西。但我的所有按钮都保持不变。它们位于屏幕宽度的三分之一处(Gdx.graphics.getWidth() / 3)。

我错过了什么,或做错了吗?我认为我根据我在谷歌上找到的所有内容正确地做到了这一点。

谢谢:)

1 个答案:

答案 0 :(得分:1)

Stage类有不同的构造函数。其中一些构造函数采用Viewport,其中包含Camera。如果您使用没有Viewport的构造函数,Stage会使用新的Viewport创建新的Camera。 在这种情况下,除非您通过调用Viewport切换Camera,否则它将使用创建的Viewport(和setViewport)来绘制所有图片。
由于您没有显示,如何创建Stage我不确定您的情况是否是问题,但如果这是问题,您可以通过创建Viewport来解决问题您的Camera并将其传递给Stage或更改CameraViewport)的stage.getViewport().setCamera(myCamera)
希望它有所帮助。