Search code examples
javaandroidlibgdx

How to record a longer touch for a higher jump on libgdx


So in my game I want to have it so the longer someone holds down on the screen the higher my character jumps. However I don't know how to check if someone is holding down on the screen.

My current attempt is to do this: And run it every frame in the update method

public void handleInput(float dt) {
    if (Gdx.input.isTouched()) {
        if (sheep.getPosition().y != sheep.maxHeight && sheep.getPosition().y == sheep.minHeight) {
                sheep.jump(1);
        }

        if (sheep.getPosition().y == sheep.maxHeight && sheep.getPosition().y != sheep.minHeight) {
                sheep.jump(-1);
        }
    }
}

Solution

  • I am suggesting two way to detect long touch, choose one according to your requirement.

    1. You can use longPress method of GestureListener interface to detect there is a long press or not. By default longPress duration is 1.1 seconds that mean user have to touch the screen equal to this duration, to fire a longPress event.

      @Override
      public boolean longPress(float x, float y) {
      
          Gdx.app.log("MyGestureListener","LONG PRESSED");
          return false;
      }
      

      Set your implementation as InputProcessor.

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

    1. longPress only gets called one time after holding the screen for X time. so it's better to create own logic and check how long user touched the screen.

      if (Gdx.input.isTouched()) {
         //Finger touching the screen
         counter++;
      }
      

      And on touchUp of InputListener interface make jump according to value of counter and reset value of counter to zero.

      @Override
      public boolean touchUp(int screenX, int screenY, int pointer, int button) {
         //make jump according to value of counter
         counter=0;    //reset counter value
         return false;
      }
      

      Set your implementation as InputProcessor.

      Gdx.input.setInputProcessor(new MyInputListener());