在特定时间检测屏幕按下

时间:2013-04-24 16:25:57

标签: java android arrays time detection

所以,我对java和android编程相当新,我遇到的问题是我正在研究的项目的代码。基本上,有一个时间列表,我认为需要将其存储为数组。游戏开始后,需要做以下两件事之一:

  1. 如果用户在阵列中的几毫秒内按下屏幕,它将注册为命中并增加计数。
  2. 如果用户在“点击”时间之外按下屏幕,它将注册为未命中并重置计数为0.
  3. 现在,我已经准备好所有元素以使一切正常工作(增加屏幕印刷的数量等)。我的问题是用于检测用户是否按时按下屏幕的代码。我尝试过一些搜索,但我无法弄清楚。以下是“好”点击次数的小列表:

    • 0.25
    • 0.84
    • 1.03
    • 1.60
    • 2.3
    • 2.6
    • 2.9

    这些时间可能会稍微改变,如果不能正常工作,可以删除一些时间。我能想到的最大问题是确保它在游戏开始时启动计时器,以便时间匹配。当前计时器从100开始并一次倒计时1秒,当它达到零时,它将用户通过屏幕进入游戏。当然,如果有更好的方法可以改变,或者以不同的方式使屏幕按下检测代码工作,这可能会改变。

    知道如何使这项工作?

1 个答案:

答案 0 :(得分:1)

实际上,您需要做的就是在游戏开始时记录当前的系统时间。然后,它只是:

long startTime = System.currentTimeMillis();
//...
System.currentTimeMillis() - startTime;

然后,检查你是否在数组中任何一点设置的边界内(我假设它是一个双精度数组):

public final static int THRESHOLD_MSEC = 100;
public boolean isHit(double time) {
    int time = System.currentTimeMillis - startTime;
    for(double d : array)
        if(Math.abs(d-time) < THRESHOLD_MSEC) return true;
    return false;
}

然后,在您的应用程序的其他地方,您可以处理isHit返回true或false时发生的情况。我不打算为你写那部分。值得注意的是:与人类反应相比,几毫秒 nothing nobody 将能够创造那个时间。