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.

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)

  • ¿Cómo hacer detector de contador enemigo en libgdx?
  • Varias cámaras en libgdx (probablemente similar en otros marcos)
  • Descripción de la matriz de proyección libGDX
  • ¿Cómo libgdx detecta la presencia del teclado?
  • LibGDX soporta 3D como Unity3D
  • No se puede agregar gdx-tools al proyecto libgdx gradle
  • Los colores de ShapeRenderer dejan de funcionar al renderizar imágenes con SpriteBatch
  • Dibujo de un gradiente en Libgdx
  • Libgdx o playn?
  • Cómo construir y desplegar automáticamente a varios dispositivos Android en Intellij
  • touchdown mantenido libgdx
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.