【问题标题】:Loop to change Boolean to false after time?循环以在一段时间后将布尔值更改为假?
【发布时间】:2013-05-26 06:24:47
【问题描述】:

这应该很简单,但我似乎无法解决。

我想创建一个方法,它会在调用一段时间后返回一个布尔假值。

我尝试过 for、while 和 switch 语句,但没有一个达到预期效果。

原因:我有一个 on touch 事件,它改变一个布尔值来激活游戏状态。我希望这个值在一段时间后变回 false 以避免用户持有触摸事件来无限期地保持游戏状态。

我在我的游戏循环中尝试了以下方法,在一段时间后将值改回 false。这将在调用 state activate 方法的同时被调用。

private void stateCounter() {
     int count = 100;
       for (int i =0; i < count ; i++) {
       stateBoolean = true;
       }
       stateBoolean = false;

}



private void stateCounter() {
     int count = 1;
       while (count < 100) {
       stateBoolean = true;
       count++;
       }
       stateBoolean = false;

}

最好的方法是什么?

【问题讨论】:

  • 提供你试过的代码。
  • 澄清你需要什么,最好告诉我们你为什么要延迟读取变量..如果你在异步系统中进行编程,并且你想延迟读取变量,因为您正在等待某些东西,那么我认为您应该在读取它之前与影响该布尔变量的进程同步
  • 我添加了一个更好的描述和一些我必须让它工作的循环想法,我希望这能澄清一点。
  • 您应该使用真正的计时器。您的循环将在很短的时间内执行这 100 个增量,您不会注意到变化。
  • 正如 Maroun 所说,您应该使用实时计时器。这不是因为 100 个增量会立即执行(您可以执行 10000 或 1000000),而是会根据处理器负载和设备给出不同的延迟。实时计时器以这种方式是独立的。

标签: java loops logic


【解决方案1】:

使用Handler.PostDelayed方法在间隔后执行一些任务。例如

Handler h = new Handler();
h.postDelayed(new Runnable(){
    public void run(){
        // perform your tasks here
    }
},interval);

但有一件事我不清楚。你想在触摸完成时更改计数器(即手指向上)。在这种情况下你可以使用这个

yourButton.setOnTouchListener(new OnTouchListener () {
  public boolean onTouch(View view, MotionEvent event) {
    else if (event.getAction() == android.view.MotionEvent.ACTION_UP) {
      // call the method now
    }
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-09
    • 1970-01-01
    • 2021-10-27
    • 1970-01-01
    • 2011-01-23
    • 2020-02-07
    • 2013-07-29
    • 2021-06-05
    相关资源
    最近更新 更多