7

我是 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;
    }

}

我还设置InputListener了我舞台的演员,以便拖动他们。问题是,当我设置InputProcessor为时GestureDetector,我的演员的拖动不起作用。我想用相机和 进行捏缩放GestureDetector,但它不会对拖动产生影响。我怎样才能做到这一点?

请提供任何帮助!谢谢。

4

2 回答 2

8

CodeNoob 走在正确的道路上,但我认为您可能希望以不同的方式构建事物。

您可以使用 anInputMultiplexer来安装全局GestureListener和舞台的侦听器:

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

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

于 2013-02-12T14:16:08.943 回答
3

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

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

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

于 2013-02-12T11:23:40.803 回答