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
:
- LibGDX ScrollPane que muestra la pantalla negra
- LibGDX Servicios de juegos de Google Play - Android
- La mejor manera de detectar el objeto tocado (moviéndose) de la colección en libgdx
- Groovy Android y libgdx
- Cómo compartir la captura de pantalla de la puntuación del juego libgdx en whatsapp y facebook?
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.
- LibGDX pausa en funcionamiento durante unos segundos
- Libgdx no procesa las fuentes correctamente después de reanudar
- Servicios de juegos de Google Play en un juego de escritorio
- Cortar un cuadrado translúcido en una textura
- No hay sonido en la aplicación Android con Libgdx
- ¿Cómo tratar con diferentes relaciones de aspecto en libGDX?
- ¿Cómo puedo hacer algo cada segundo?
- ¿Puedo eliminar com.google.android.gms.version de AndroidManifest cuando uso gradle?
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 mantener un servicio con los oyentes vivo después de desatar en Android?
- ¿Cómo deshacerse de la brecha extra entre un botón y otras vistas?