Search code examples
javaandroidtouchlibgdxswipe

LibGDX - Get Swipe Up or swipe right etc.?


touch area http://imageshack.us/a/img836/2909/swipe1.png

In the green area the user can swipe up, right, down, left. How can I now get e.g. swipe Up? or swipe Down? or swipe right or swipe left? e.g. how to get a String -> input = getSwiped(); -> input is then Up, or right, or down, or left

And the user can touch two buttons. 1 or 2. 1 is for duck and 2 is for jump.

I want to check this inputs at the same time. The user can touch and also swipe Up at the same moment.

I know there is a GestureDetector. I looked at the code, but no clue how can I use the swipe part.

I know a little bit how to check the buttons. The problem is only here -> How to check the inputs at the same time and how get Swipe Up, or Swipe right etc.

I searched an found how to check 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;
    //...
}

Solution

  • This explain a very good way to implement a system to detect the direction of a swipe. I'll post it here because the article may be lost in the future:

    Create a class name 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);
        }
    
    }
    
    }
    

    On the create() function of the LibGdx application, put this to activate gesture handling for your game:

    Gdx.input.setInputProcessor(new SimpleDirectionGestureDetector(new SimpleDirectionGestureDetector.DirectionListener() {
    
    @Override
    public void onUp() {
    
    }
    
    @Override
    public void onRight() {
    
    }
    
    @Override
    public void onLeft() {
    
    }
    
    @Override
    public void onDown() {
    
    }
    }));