Как реагировать на нажатие пользователя более одного раза - PullRequest
0 голосов
/ 13 января 2012

Я использую этот метод в 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;
}

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

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

1 Ответ

1 голос
/ 13 января 2012

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

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

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

private long lastTap=0;
onTap() {
  long now = System.nanoTime();
  if (now-lastTap < threshold) return;
  else lastTap = now;
  ...
}
...