java - 如何对用户多次点击使用react

标签 java android andengine

我在 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 我遇到的问题是,如果用户双击屏幕,那么 Sprite 会跳两次,这会将他移出他应该返回的位置。因为当它跳跃两次时,Y 会发生变化。

如何允许 Sprite 在每次点击时只移动一次,即使用户点击多次?

最佳答案

手动解决方案是设置一个延迟(记录点击的时间戳),并忽略某个时间增量内的点击。我建议使用高分辨率 java.lang.System.nanoTime()

特别是电容式触摸屏很容易产生多次轻击,甚至是无意的。它在 Android 中没有得到处理,并且已被证明对我们的应用程序来说是一个严重的问题...

更新:伪代码示例

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

关于java - 如何对用户多次点击使用react,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8844519/

相关文章:

java - 基于 Eclipse JSDT 的编辑器的内容辅助

java - 如果使用 ruby​​ on rails、python 或 java 可以做得更好,为什么还要使用 php 框架进行编程?

java - 无法使用 Mockito 2 模拟最终的 Kotlin 类

android - 添加库时导出android项目时出错

java - 移动平台对象 - 使用 box2D 的 Android 游戏

java - 如何将 javax.comm API 导入 Netbeans IDE?

java - 如何在java中使用正则表达式解析给定的字符串

android - 如何拉伸(stretch)以适合动态壁纸上的背景图像

android - 仅通过当前数据使用 MediatorLiveData 的最佳实践

android - 将偏移监听器设置为 CollapsingToolbarLayout