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は正しい方向に進んでいますが、構造を変えたいと思うかもしれません。

を使用しInputMultiplexerて、グローバルGestureListenerリスナーとステージのリスナーの両方をインストールできます。

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

もう1つ注意すべき点は、boolean入力リスナーのすべてのメソッドの戻り値です。「true」を返すものはすべて、イベントを「処理済み」としてマークし、マルチプレクサはイベントをピアに渡しません。また、マルチプレクサ内の入力プロセッサの順序によって違いが生じます(基になるinputProcessorからイベントが隠される可能性があるため)。したがって、例で「true」を返す自動生成されたスタブは、一連のイベントを「食べる」ことになります。このハンドラーがマルチプレクサーの最初にある場合、ステージからイベントを非表示にします。

于 2013-02-12T14:16:08.943 に答える
3

InputMultiplexerを作成する必要がありますInputMultiplexer myInputMultiplexer = new InputMultiplexer()

次に、GestureDetectorとInputListenerの両方をInputMultiplexer(myInputMultiplexer.addProcessor())に追加します。

そして最後に、マルチプレクサを次のようにメインのInputProcessorとして設定する必要があります。Gdx.input.setInputProcessor(myInputMultiplexer)

于 2013-02-12T11:23:40.803 に答える