1

私はAndroidゲームを書いています。メインゲーム画面にはカウントダウンタイマーがあり、ゼロになるとゲームオーバーです。以下のコードは、ユーザーがレベルを初めてプレイするときに機能します。ただし、ユーザーが 2 番目のレベルをプレイする約 5 回ごとに、生成される数字はランダムになります。たとえば、30 から始まり、その後 -15 になりました。誰でもこれを行う理由を提案できますか?

public class Timer1 {
int time = 120;
int counter = 0;
int startTime = 30; // Change to 2 minutes
Timer timer;

boolean end = false;

World world = new World();

public Timer1() {

}

public void subtractTime() {
    startTime = startTime - 15; // Knock off 15 seconds for hint
}

public int getTime() {
    return time;
}

public void startTimer() {
    timer = new Timer();
    time = 120;
    startTime = 30;
    end = false;
    timer.scheduleAtFixedRate(new TimerTask() {
        public void run() {
            counter++;
            time = startTime - counter;
            if (time == 0) {
                world.gameOver = true;
                end = true;
                timerCancel();
            }
        }
    }, 0, 1000);
}

public void timerCancel() {
    timer.cancel();
}

}
4

3 に答える 3

1

毎回このクラスをインスタンス化していない場合、カウンターを0にリセットすることはありません。その数はどんどん増えていきます。

public void startTimer() {
    timer = new Timer();
    time = 120;
    startTime = 30;
    counter = 0; // NEW CODE
    end = false;
    timer.scheduleAtFixedRate(new TimerTask() {
        public void run() {
            counter++;
            time = startTime - counter;
            if (time == 0) {
                world.gameOver = true;
                end = true;
                timerCancel();
            }
        }
    }, 0, 1000);
}

しかし、あなたがしていることはstartTimerを呼び出すことですが、「タイマーをリセットする」ことです。つまり、すべての変数リセットすると、タイマーが開始されます。毎回やった方が簡単new Timer1().startTimer()で、コードが読みやすくなり、メンテナンスも簡単になります。

また、数学がオフで、時間が 0 ではなく 0未満の場合、タイマーは続行します。気をつけて。if (time == 0) {

これを試して:

 if (time <= 0) {
于 2012-12-28T12:06:23.810 に答える
0

をリセットしていませんcountertime == 0終了条件に達しない場合はレベルを終了するため。

TimerTaskさらに、 が毎秒呼び出されると想定しています。一般に、この仮定は誤りです。ゲームが CPU 時間を必要とする場合、TimerTaskの実行が遅れる可能性があります。したがって、start() のシステム時刻を記憶し、System.currentTimeMillis()連続する呼び出しごとにTimerTaskどれくらいの時間が経過したかを確認し、カウンターの代わりにそれに基づいて時間が経過しているかどうかを判断することを検討してください。

于 2012-12-28T12:18:03.840 に答える
0

Handlerと メソッドを使用すると、コードがはるかに簡単になりますHandler.postDelayed

Android ドキュメントをご覧ください

于 2012-12-28T12:24:53.987 に答える