2016-06-02 8 views
1

Ich entwickle ein Spiel mit LibGDX und ich habe Probleme bei der Bestimmung einer fling von einer pan.Ermitteln einer Schleuder aus einer Pfanne in libgdx

Mein GestureListener:

@Override 
public boolean fling(float velocityX, float velocityY, int button) { 
    //if (velocityX > 1000f) { 
    // I can use this to exclude slow pans from the executing a fling 
     System.out.println("Flinged - velocityX: " + velocityX + ", button: " + button); 
    //} 
    return false; 
} 

@Override 
public boolean pan(float x, float y, float deltaX, float deltaY) { 
    // but there doesn't seem to be a way to have this not fire on a fling 
    System.out.println("Panned - deltaX: " + deltaX); 
    return false; 
} 

@Override 
public boolean panStop(float x, float y, int pointer, int button) { 
    System.out.println("Pan Stop - pointer: " + pointer + ", button: " + button); 
    return false; 
} 

Das Problem ist, dass, wenn beide pan und fling Feuer. Ich verstehe, dass eine fling im Grunde eine schnelle pan ist, aber ich muss in der Lage sein, zwischen den beiden Gesten zu bestimmen, damit ich jede separat behandeln kann.

Eine knappe Art zu fragen ist, wie kann ich einzigartige Aktionen für fling und pan bereitstellen?

Antwort

0

Die vernünftigste Lösung für diese meiner Meinung nach ist longPress zu verwenden, um einige boolean Flag auf ‚den Schwenkmodus‘, wenn nur ohne langes Drücken klauen darum, fling sein wird. Diese

ist, wie ich das sehen:

//the flag for checking if pan mode entered 
    boolean PAN = false; 

    @Override 
    public boolean longPress(float x, float y) { 
     PAN = true; 
     return false; 
    } 

    @Override 
    public boolean fling(float velocityX, float velocityY, int button) { 
     if(!PAN) { 
      System.out.println("Flinged - velocityX: " + velocityX + ", button: " + button); 
     } 
     return false; 
    } 

    @Override 
    public boolean pan(float x, float y, float deltaX, float deltaY) { 
     if(PAN) { 
      System.out.println("Panned - deltaX: " + deltaX); 
     } 
     return false; 
    } 

    @Override 
    public boolean panStop(float x, float y, int pointer, int button) { 
     if(PAN) { 
      PAN = false; 
      System.out.println("Pan Stop - pointer: " + pointer + ", button: " + button); 
     } 
     return false; 
    } 

Natürlich, wenn die longPress für Ihre Zwecke zu lang ist, dass Sie es durch die Verwendung setLongPressSeconds(float longPressSeconds) Methode der GestureDetector Instanz ändern können

+0

technisch funktioniert das, aber scheint unmöglich, das "Gefühl" richtig zu machen. Ich kann zwischen Pan und Fling erkennen, aber ich habe schon eine Weile mit der langen Druckdauer gespielt und es scheint fast unmöglich, eine gute Zahl dafür zu bekommen. ~ 100ms (0.1s) schien beim Testen auf meinem Nexus 5 am besten zu funktionieren, aber es war nicht konsistent. Manchmal, was sich für mich wie eine Pfanne anfühlte (langsamer als ein Schlag/Schleudern), wurde nicht registriert und manchmal tat es auch. – Townsfolk

Verwandte Themen