問題

私はlibgdxで新しいです。私は次の問題があります。私は自分のゲームのピンチズームをしたい。そのために私は私のGameStageGestureDetectorListenerクラスを持っています。

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を設定してドラッグしました。問題は、InputProcessorGestureDetectorに設定すると、アクターのドラッグが機能しないことです。カメラとGestureDetectorでピンチズームをしたいのですが、ドラッグには影響しません。どうやってやるの?

助けてください! ありがとう。

  ベストアンサー

CodeNoobは正しいパスにありますが、私はあなたが物事を別々に構造化したいかもしれないと思います。

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

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

注意すべきもう1つは、入力リスナーのすべてのbooleanメソッドの戻り値です。 "true"を返すものはイベントを "handled"とマークし、多重化されたものはそのピアにイベントを渡しません。また、多重化された入力プロセッサの順序が違いを生みます(基礎となるInputProcessorからイベントを非表示にする可能性があるため)。したがって、自動生成されたスタブは、イベントの束を「食べる」ことになります。これが最初のハンドラである場合、

  同じタグがついた質問を見る

javaandroidlibgdxpinchzoomgesturedetector