sobota, 27 lipca 2013

LIBGDX - GestureDetector - obsługa gestów.

LibGdx dostarcza klasę GestureDetector, która umożliwia detekcję następujących gestów:

  • tap: użytkownik dotyka ekran i podnosi palec ponownie. Palec nie może być przesunięty poza określony obszar wokół miejsca początkowego dotknięcia. Wielokrotne dotknięcie zostanie zarejestrowane jeśli użytkownik dotknie ekran kilka razy w określonym przedziale czasowym.
  • pan: użytkownik przesuwa palec po ekranie. Detektor udostępnia współrzędne dotknięcia ekranu jak również odległość (deltę) przesunięcia między aktualnym a poprzednim miejscem dotknięcia. Przydatne np. do implementacji przesuwania kamery w widoku 3D.
  • fling: Użytkownik przesuwa palec po ekranie i podnosi go.
  • zoom: użytkownik kładzie dwa palce na ekranie i przesuwa je względem siebie. Detektor udostępnia początkowy i bieżący dystans między palcami w pixel-ach. Przydatne np. do implementacji powiększania/zmniejszania.
  • pinch: podobne do poprzedniego - detektor udostępnia początkowe i bieżące położenie palców (nie odległość a położenie). Przydatne do implementacji powiększania/zmniejszania a w szczególności obracania
Aby obsłużyć detektor należy zaimplementować odpowiedni GestureListener i przekazać jego interfejs do konstruktora detektora.

public class MyGestureListener implements GestureListener {

   @Override
   public boolean touchDown (int x, int y, int pointer) {
      return false;
   }

   @Override
   public boolean tap (int x, int y, int count) {
      return false;
   }

   @Override
   public boolean longPress (int x, int y) {
      return false;
   }

   @Override
   public boolean fling (float velocityX, float velocityY) {
      return false;
   }

   @Override
   public boolean pan (int x, int y, int deltaX, int deltaY) {
      return false;
   }

   @Override
   public boolean zoom (float originalDistance, float currentDistance) {
      return false;
   }

   @Override
   public boolean pinch (Vector2 initialFirstPointer, Vector2 initialSecondPointer, Vector2 firstPointer, Vector2 secondPointer) {
      return false;
   }
}


Gdx.input.setInputProcessor(new GestureDetector(new MyGestureListener()));

Podobnie jak w przypadku zdarzeń 'normalnego' InputProcessor-a obsługa zdarzeń następuje tuż przed wywołaniem ApplicationListener.render().

GestureDetector posiada również drugi konstruktor umożliwiający przekazanie dodatkowych parametrów - patrz JavaDocs.

Brak komentarzy:

Prześlij komentarz