1

さて、暇なときにゲームを作成する際に、次のシナリオを回避してコーディングしようとすると、完全に行き詰まりました。

タップイベント(TouchEvent.ACTION_DOWN)をキャプチャしてから、500ミリ秒間隔で、画面がまだ押されているかどうかを確認し、同じアクションを無限に繰り返します。

だから、私は始めました:

switch (myTouchHandler.getAction()) {
  case (TouchEvent.ACTION_DOWN):
  case (TouchEvent.ACTION_MOVE):
    if (inputIntervalTooSoon()) return true;
    //do the magic i intend to do....
 }

....

private boolean inputIntervalTooSoon() {
        final long now = System.currentTimeMillis();
        if ((now - lastTouchEventTime) < 500) return false;
        lastTouchEventTime = now;
        return true;

これにより、500ミリ秒待機するという効果が得られますが、指がまだ下にあるかどうかはすぐには検出されません。指を少し動かすとまた拾い上げて休眠状態に戻ります。

Interval関数を含めないと、アクションは常に実行されます。これをより適切に実装する方法についてのアイデアをいただければ幸いです。

4

2 に答える 2

3

TouchEvent.ACTION_DOWNで開始されるタイミングスレッドを想像できます。これは、500ミリ秒間スリープするループ内で開始および実行されます。スリープ後、チェックを実行できるようになります。これにより、カスタム処理が実行され、TouchEvent.ACTION_UPが発生したかどうかがチェックされます(これはEventHandlerに記録する必要があります)。

もちろん、必要となる同期が少しあります。

これは意味がありますか?

これに沿った何か:

boolean upHappened;

switch (myTouchHandler.getAction()) {
  case (TouchEvent.ACTION_DOWN):
  upHappened = false;
  new Thread(new TimerRunnable()).start();
  case (TouchEvent.ACTION_UP):
  case (TouchEvent.ACTION_CANCEL):
  upHappened = true;
}

class TimerRunnable implements Runnable {
  public void run() {
    while(true) {
      Thread.sleep(500);
      if(upHappened) break;
      //custom processing
    }
  }
}
于 2011-05-10T01:20:06.307 に答える
0

ACTION_UPまたはACTION_CANCELアクションのいずれかを含むイベントが発生するまで画面が押されるので、逆にチェックします。

于 2011-05-10T01:20:38.830 に答える