Как реагировать на нажатие пользователя более одного раза

Я использую этот метод в AndEngine, чтобы определить, когда пользователь нажимает на экран,

@Override
public boolean onSceneTouchEvent(Scene pScene, TouchEvent pSceneTouchEvent) {
     if(pSceneTouchEvent.isActionDown()) {
         if(pSceneTouchEvent.isActionDown()) { //Jump only if the user tapped, not moved his finger or something
              taps++;
                if(taps == 1){
             if(isJumping == false){
                final float jumpDuration = 2;
                final float startX = player.getY();
                final float jumpHeight = 100;

                final MoveYModifier moveUpModifier = new MoveYModifier(.1f, startX, startX  - jumpHeight);
                final MoveYModifier moveDownModifier = new MoveYModifier(.1f, startX - jumpHeight, startX);
                final SequenceEntityModifier modifier = new SequenceEntityModifier(moveUpModifier, moveDownModifier);

                player.registerEntityModifier(modifier);
                isJumping = true;
                hipp_jump.play();
                return true;
             }
            }
         }

     }
    return false;
}

Sooo Проблема, с которой я сталкиваюсь, заключается в том, что если пользователь дважды нажимает на экран, спрайт дважды прыгает, что перемещает его из положения, в которое он должен вернуться. Потому что, когда он прыгает дважды, меняется Y.

Как я могу разрешить спрайту перемещаться только ОДИН РАЗ при каждом касании, даже если пользователь нажимает более одного раза?


person coder_For_Life22    schedule 13.01.2012    source источник
comment
(developer.android.com/reference/android/view/) Может поможет   -  person Bry6n    schedule 13.01.2012


Ответы (1)


Ручное решение состоит в том, чтобы установить задержку (записать метку времени нажатия) и игнорировать нажатия в течение некоторого времени. Я предлагаю использовать высокое разрешение java.lang.System.nanoTime()

Особенно емкостные сенсорные экраны склонны генерировать несколько нажатий даже непреднамеренно. Это не обрабатывается в Android и оказалось серьезной проблемой для нашего приложения...

Обновление: образец псевдокода

private long lastTap=0;
onTap() {
  long now = System.nanoTime();
  if (now-lastTap < threshold) return;
  else lastTap = now;
  ...
}
person ᆼᆺᆼ    schedule 13.01.2012
comment
Да, это вызывает проблемы для игрового проекта. Так как же это реализовать? - person coder_For_Life22; 13.01.2012
comment
Это просто мое сокращение для onSceneTouchEvent или любого другого метода, обрабатывающего прикосновения. - person ᆼᆺᆼ; 13.01.2012