2013-03-03 2 views
8

touch area http://imageshack.us/a/img836/2909/swipe1.pngLibGDX - Проведите пальцем вверх или проведите пальцем вправо и т. Д.?

В зеленой зоне пользователь может провести пальцем вверх, вправо, вниз, влево. Как я могу получить, например, проведите пальцем вверх? или проведите вниз? или проведите пальцем вправо или проведите пальцем влево? , например. как получить строку -> input = getSwiped(); -> Ввод вверх или справа или вниз или слева

И пользователь может коснуться двух кнопок. 1 или 2. 1 для утки и 2 для прыжка.

Я хочу проверить эти входы одновременно. В тот же момент пользователь может коснуться и также нажать «Вверх».

Я знаю, что есть GestureDetector. Я просмотрел код, но не знаю, как я могу использовать салфетку.

Я знаю немного, как проверить кнопки. Проблема только здесь -> Как проверить входы в то же время и как получить Размах Up, или проведите пальцем вправо и т.д.

Я искал нашел, как проверить 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; 
    //... 
} 

ответ

17

This объяснить очень хороший способ реализовать систему для определения направления салфетки. Я отправлю его здесь, потому что эта статья может быть потеряна в будущем:

Создайте имя класса 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); 
    } 

} 

} 

О функции создания() приложения LibGdx, поставить это активировать жест обработки для ваша игра:

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

Я использую это в моей игре, проблема в том, когда я красть в любом направлении, игра останавливается на некоторое время (на какое-то время я имею в виду в миллисекундах, но это заметно). Есть ли способ исправить это? –

+0

Невозможно узнать, почему это происходит, если вы не показываете код, что не должно произойти – Lestat

+0

Интересно, почему он еще не добавлен в Libgdx. BTW, если вы хотите использовать жестов салфетки (например, по порядку InputMultiplexer), вам нужно вернуть 'true' из метода 'fling' – Enigo

Смежные вопросы