2013-03-03 16 views
8

touch area http://imageshack.us/a/img836/2909/swipe1.pngLibGDX - Scorri verso l'alto o scorri verso destra ecc.?

Nell'area verde l'utente può scorrere verso l'alto, a destra, in basso, a sinistra. Come posso ora ottenere ad es. scorrere verso l'alto? o scorrere verso il basso? oppure scorri verso destra o scorri verso sinistra? ad es. come ottenere una stringa -> input = getSwiped(); -> l'input è quindi Su, o destra, o giù, o sinistra

E l'utente può toccare due pulsanti. 1 o 2. 1 è per anatra e 2 è per salto.

Voglio verificare questi ingressi allo stesso tempo. L'utente può toccare e anche scorrere verso l'alto nello stesso momento.

So che esiste un GestureDetector. Ho guardato il codice, ma non ho idea di come posso usare la parte di scorrimento.

So un po 'come controllare i pulsanti. Il problema è solo qui -> Come controllare gli ingressi allo stesso tempo e come ottenere scorrere verso l'alto, oppure scorri verso destra ecc

ho cercato un trovato come controllare Multitouching:

for (int i = 0; i < 10; i++) { 
    if (Gdx.input.isTouched(i) == false) continue; 
    float x = Gdx.input.getX(i); 
    float y = Gdx.graphics.getHeight() - Gdx.input.getY(i) - 1; 
    //... 
} 

risposta

17

This spiegare un ottimo modo per implementare un sistema per rilevare la direzione di uno swipe. Vi posto qui perché l'articolo può essere perso in futuro:

Creare un nome di classe SimpleDirectionGestureDetector

public class SimpleDirectionGestureDetector extends GestureDetector { 
public interface DirectionListener { 
    void onLeft(); 

    void onRight(); 

    void onUp(); 

    void onDown(); 
} 

public SimpleDirectionGestureDetector(DirectionListener directionListener) { 
    super(new DirectionGestureListener(directionListener)); 
} 

private static class DirectionGestureListener extends GestureAdapter{ 
    DirectionListener directionListener; 

    public DirectionGestureListener(DirectionListener directionListener){ 
     this.directionListener = directionListener; 
    } 

    @Override 
    public boolean fling(float velocityX, float velocityY, int button) { 
     if(Math.abs(velocityX)>Math.abs(velocityY)){ 
      if(velocityX>0){ 
        directionListener.onRight(); 
      }else{ 
        directionListener.onLeft(); 
      } 
     }else{ 
      if(velocityY>0){ 
        directionListener.onDown(); 
      }else{         
        directionListener.onUp(); 
      } 
     } 
     return super.fling(velocityX, velocityY, button); 
    } 

} 

} 

Sulla funzione create() dell'applicazione LibGdx, mettere questo gesto per attivare la gestione per il vostro gioco:

Gdx.input.setInputProcessor(new SimpleDirectionGestureDetector(new SimpleDirectionGestureDetector.DirectionListener() { 

@Override 
public void onUp() { 

} 

@Override 
public void onRight() { 

} 

@Override 
public void onLeft() { 

} 

@Override 
public void onDown() { 

} 
})); 
+1

sto usando questo nel mio gioco, il problema è ogni volta che swipe in qualsiasi direzione il gioco si ferma per un certo tempo (da qualche tempo mi riferisco in millisecondi, ma è evidente). C'è un modo per risolverlo? –

+0

è impossibile sapere perché ciò che accade se non mostrare il codice, che sognerei accadere – Lestat

+0

Mi chiedo perché non è ancora aggiunto nella Libgdx. BTW, se si vuole consumare il gesto di scorrimento (ad esempio in ordine InputMultiplexer) è necessario restituire 'true' da 'metodo fling' – Enigo

Problemi correlati