GestureDetector en libgdx

Soy nuevo en libgdx. Tengo el siguiente problema. Quiero hacer pinch zoom para mi juego. Para eso tengo clase GestureDetectorListener en mi GameStage .

En GameStage tengo el siguiente código para 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; } } 

También he establecido InputListener para los actores de mi etapa, con el fin de arrastrarlos. El problema es que, cuando establezco InputProcessor en GestureDetector , el arrastre de mis actores no funciona. Quiero tener una pizca de zoom con la cámara y GestureDetector , pero no tendrá una influencia sobre el arrastrar. ¿Cómo puedo hacer eso?

Cualquier ayuda por favor! Gracias.

2 Solutions collect form web for “GestureDetector en libgdx”

CodeNoob está en el camino correcto, pero creo que es posible que desee estructurar las cosas de manera diferente.

Puede usar un InputMultiplexer para instalar un GestureListener global y el GestureListener su etapa:

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

La otra cosa a tener en cuenta es que los valores de retorno en todos los métodos boolean en sus oyentes de entrada. Cualquiera que devuelva "true" marcará el evento como "manipulado" y el multiplexor no pasará el evento a su compañero. Además, el orden de los procesadores de entrada en el multiplexor hace una diferencia (ya que puede ocultar eventos del subyacente inputProcessor). Por lo tanto, los talones auto-generados que devuelven 'verdadero' en su ejemplo, se "comen" un montón de eventos. Si este controlador es el primero en el multiplexor, que se ocultan los eventos de la etapa.

Necesita crear un InputMultiplexer InputMultiplexer myInputMultiplexer = new InputMultiplexer()

A continuación, agregue su GestureDetector y InputListener al InputMultiplexer ( myInputMultiplexer.addProcessor() ).

Y al final, tiene que configurar el multiplexador como el principal InputProcessor como este: Gdx.input.setInputProcessor(myInputMultiplexer)

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.