libgdx中的GestureDetector

时间:2013-02-12 08:04:53

标签: java android libgdx pinchzoom gesturedetector

我是libgdx的新手。我有以下问题。我想为我的游戏进行缩放缩放。为此,我在GestureDetectorListener中有GameStage课程。

GameStage GestureDetector我有以下代码:

OrthographicCamera camera = new OrthographicCamera(Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
this.setCamera(camera);


GestureDetector gestureDetector = new GestureDetector(20, 0.5f, 2, 0.15f, new GestureDetectorListener());
Gdx.input.setInputProcessor(gestureDetector);

class GestureDetectorListener implements GestureListener {
    float initialScale = 1;

    @Override
    public boolean touchDown(float x, float y, int pointer, int button) {
        initialScale = camera.zoom;
        return true;
    }

    @Override
    public boolean tap(float x, float y, int count, int button) {
        // TODO Auto-generated method stub
        return true;
    }

    @Override
    public boolean longPress(float x, float y) {
        // TODO Auto-generated method stub
        return true;
    }

    @Override
    public boolean fling(float velocityX, float velocityY, int button) {
        // TODO Auto-generated method stub
        return true;
    }

    @Override
    public boolean pan(float x, float y, float deltaX, float deltaY) {
        return true;
    }

    @Override
    public boolean zoom(float initialDistance, float distance) {
        float ratio = initialDistance / distance;
        camera.zoom = initialScale * ratio;
        return true;
    }

    @Override
    public boolean pinch(Vector2 initialPointer1, Vector2 initialPointer2,
            Vector2 pointer1, Vector2 pointer2) {
        // TODO Auto-generated method stub
        return true;
    }

}

此外,我为舞台的Actors设置了InputListener,以便拖动它们。问题是,当我将InputProcessor设置为GestureDetector时,拖动我的Actors无法正常工作。我想用相机和GestureDetector进行缩放缩放,但它不会对拖动产生影响。我怎么能这样做?

请帮忙! 感谢。

2 个答案:

答案 0 :(得分:8)

CodeNoob是正确的道路,但我认为你可能想要以不同的方式构建事物。

您可以使用InputMultiplexer安装全局GestureListener和您的舞台监听器:

GestureDetector gd = ...
Stage myStage = ...
InputMultiplexer im = new InputMultiplexer(gd, myStage); // Order matters here!
Gdx.input.setInputProcessor(im);

要注意的另一件事是输入侦听器中所有boolean方法的返回值。任何返回“true”的都会将事件标记为“已处理”,并且多路复用器不会将事件传递给其对等方。此外,多路复用器中输入处理器的顺序也有所不同(因为它可能会隐藏来自底层inputProcessor的事件)。因此,在您的示例中返回“true”的自动生成的存根将“吃掉”一堆事件。如果此处理程序是多路复用器中的第一个,则会隐藏舞台中的事件。

答案 1 :(得分:3)

您需要创建一个InputMultiplexer InputMultiplexer myInputMultiplexer = new InputMultiplexer()

然后将GestureDetector和InputListener都添加到InputMultiplexer(myInputMultiplexer.addProcessor())。

最后,你必须将多路复用器设置为主要的InputProcessor,如下所示:Gdx.input.setInputProcessor(myInputMultiplexer)