2013-03-03 13 views
8

touch area http://imageshack.us/a/img836/2909/swipe1.pngLibGDX - Pobierz Swipe Up lub przesuń w prawo itp?

W obszarze zielonym użytkownik może przesunąć w górę, w prawo, w dół, w lewo. Jak mogę teraz uzyskać np. przesuń palcem w górę? lub przesuń w dół? lub przesuń palcem w prawo lub przesuń w lewo? np. jak uzyskać ciąg -> input = getSwiped(); -> wejście jest następnie w górę, w prawo, w dół lub w lewo

I użytkownik może dotknąć dwóch przycisków. 1 lub 2. 1 jest dla kaczki, a 2 dla skoku.

Chcę sprawdzić te dane wejściowe w tym samym czasie. Użytkownik może dotknąć, a także przesunąć w górę w tym samym momencie.

Wiem, że istnieje GestureDetector. Spojrzałem na kod, ale nie mam pojęcia, jak mogę użyć części machnięcia.

Wiem trochę, jak sprawdzić przyciski. Problemem jest tylko tutaj -> Jak sprawdzić wejść w tym samym czasie i jak dostać Przesuń w górę lub Przesuń w prawo itp

Szukałem znaleźć jak sprawdzić 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; 
    //... 
} 

Odpowiedz

17

This wyjaśnić bardzo dobry sposób na wdrożenie systemu do wykrywania kierunku machnięcia. Ja to pisać tutaj, ponieważ artykuł może zostać utracone w przyszłości:

utworzyć nazwę klasy 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); 
    } 

} 

} 

na funkcję Create() wniosku libgdx, umieścić to, aby uaktywnić gest magazynowe gra:

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

używam tego w mojej grze, problemem jest to, ilekroć przesuń w dowolnym kierunku gra zatrzymującego przez jakiś czas (przez jakiś czas mam na myśli w milisekundach, ale jest to zauważalne). Czy istnieje sposób, aby to naprawić? –

+0

jest niemożliwe, aby dowiedzieć się, dlaczego tak się dzieje, jeśli nie pokazuje kod, który nie powinien się zdarzyć – Lestat

+0

Zastanawiam się, dlaczego nie jest jeszcze dodany do Libgdx. BTW, jeśli chcesz użyć gestu machnięcia (na przykład przez InputMultiplexer), musisz zwrócić 'true' z 'fling' method – Enigo

Powiązane problemy