1

30 秒から 0 秒までカウントダウンする可視タイマーを使用する予定です。動くスプライト (数値を含む) がタッチされたが、要求された数値と一致しない (ウィンドウ/通知に表示される) たびに、現在の残り時間が差し引かれるため、このタイマーはゲーム アプリケーションでのスコアリングの基礎となります。 5 秒ずつ (-5)。ただし、一致する数字を含むスプライトに触れると、タイマーが停止し、ゲームが再開します (または次のレベルに移動します)。

クラスtouchEvent内のコードは次のとおりです。GameView

@Override
   public boolean onTouchEvent(MotionEvent event) {
         if (System.currentTimeMillis() - lastClick > 300) {
                lastClick = System.currentTimeMillis();
                float x = event.getX();
                float y = event.getY();
                synchronized (getHolder()) {
                       for (int i = sprites.size() - 1; i >= 0; i--) {
                              Sprite sprite = sprites.get(i);
                              if (sprite.wasPopped(x, y)) {
                                    sprites.remove(sprite);
                                    spritePopped.add(new TempSprite(temps, this, x, y, pop));
                                    break;
                              }
                       }
                }
         }
         return true;
   }

移動するスプライトの周囲の領域がタッチされるたびに ( sprite.wasPopped)、そのスプライトは画面から (および割り当てられたリストから) 削除され、イメージ ( spritePopped) が続いてタッチされた場所を示します (効果を追加するため)。タイマー用に別のクラスを作成し、それを自分で利用するにはどうすればよいGameViewですか? update()これまでのところ、特定のクラスで呼び出されたイベントの数に応じてタイミングがとられるスコアリングにティックを使用することに遭遇しました。コメント/提案は非常に役に立ちます。

4

2 に答える 2

0

私はこれに関して同様の質問を見つけました、ここでタイマーは別のクラスで作成されます:

import android.os.CountDownTimer;
import android.widget.TextView;

public class MyCount extends CountDownTimer {
static TextView timeDisplay;

public MyCount(long millisInFuture, long countDownInterval) {
    super(millisInFuture, countDownInterval);
}

public void onFinish() {
    timeDisplay.setText("Time has ended. Game over.");
    //restart(); 
}

public void onTick(long millisUntilFinished) {
    timeDisplay.setText("Left: " + millisUntilFinished / 1000);
}

}

次に、これはGameViewクラスの別の関数で呼び出されます(ゲームが開始されると開始されます)。

public void setTimer() { 
timeDisplay = new TextView(this);
this.setContentView(timeDisplay);
MyCount counter = new MyCount(30000, 1000);
counter.start();

}

于 2012-09-28T20:23:54.627 に答える
0

を使用できますがTimerTask、メインスレッドで実行されていないために望ましくない影響が生じる可能性があるため、お勧めしません。

あなたがすべきことは、deltaTimeそれを変数に取得して格納することです。

    private float displayedTime;

    Public void timer(){ //call in update()
      displayedTime += deltaTime;
  }

次に、これを混ぜて、完全な秒数または好みのタイマーを取得できます。

フル FPS でゲームを実行できないデバイスに悪影響を与えるため、更新メソッドで、時間を確認したり、遅延を追加したりするために、いかなる種類のカウンターも使用しないでください。

于 2012-09-28T17:48:59.017 に答える