2013-03-03 5 views
8

touch area http://imageshack.us/a/img836/2909/swipe1.pngLibGDX - Wischen Sie nach oben oder streichen Sie nach rechts usw.?

Im grünen Bereich kann der Benutzer nach oben, rechts, unten, links wischen. Wie kann ich jetzt z. wischen? oder nach unten wischen? oder nach rechts streichen oder nach links streichen? z.B. wie man einen String bekommt -> input = getSwiped(); -> Eingabe ist dann Auf, oder rechts oder unten oder links

Und der Benutzer kann zwei Tasten berühren. 1 oder 2. 1 ist für Ente und 2 ist für springen.

Ich möchte diese Eingänge gleichzeitig überprüfen. Der Benutzer kann im selben Moment berühren und gleichzeitig nach oben wischen.

Ich weiß, dass es einen GestureDetector gibt. Ich schaute auf den Code, aber keine Ahnung, wie ich den Swipe-Teil verwenden kann.

Ich weiß ein wenig, wie man die Tasten überprüft. Das Problem ist nur hier -> Wie die Eingänge zur gleichen Zeit überprüfen und wie Swipe nach oben bekommen, oder Wischen Sie nach rechts usw.

ich eine gefunden gesuchten wie Multitouching überprüfen:

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; 
    //... 
} 

Antwort

17

This a erklärt sehr gute Möglichkeit, ein System zu implementieren, um die Richtung eines Swipe zu erkennen. Ich werde es hier posten, weil der Artikel in der Zukunft verloren:

Erstellen Sie einen Klassennamen 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); 
    } 

} 

} 

Auf der create() Funktion der Libgdx Anwendung, setzen diese Geste aktivieren für den Umgang mit Ihr Spiel:

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

ich dies in meinem Spiel verwende, ist das Problem, wenn ich in eine beliebige Richtung Swipe das Spiel für einige Zeit (nach einiger Zeit habe ich in Millisekunden bedeuten, aber es ist spürbar) hält. Gibt es eine Möglichkeit, es zu beheben? –

+0

ist es unmöglich zu wissen, warum das passiert, wenn Sie keinen Code zeigen, der nicht passieren sollte – Lestat

+0

Ich frage mich, warum es immer noch nicht in Libgdx hinzugefügt wird. BTW, wenn Sie die Wischgeste (zum Beispiel von InputMultiplexer Reihenfolge) verbrauchen möchten, müssen Sie 'True' von 'Schleudern 'Methode – Enigo

Verwandte Themen