В моей игре пользователь оценивает, когда он пробирается слева направо на экране в течение 5 секунд. Если он пробирается справа налево или ему требуется более 5 секунд, игра заканчивается. Я пытаюсь отменить обратный отсчет после того, как он получит очко, чтобы обновить таймер. Также я пытаюсь отменить его, когда пользователь ошибается. Проблема заключается в том, что когда пользователь получает точку, обратный отсчет не прекращает отсчет, и когда есть ошибка, поэтому игра должна быть закончена, таймер отсчитывает оставшееся время от предыдущего прогона до его остановки и печатает GameOver , Неправильно ли использовать глобальный таймер?андроид - таймер обратный отсчет неправильный для нескольких прогонов
public class GameScreen extends Activity implements OnGestureListener {
private boolean animationRunning = false;
public int sco = 0;
float x1, x2;
float y1, y2;
public TextView text;
public TextView scorete;
private static final String FORMAT = "%02d:%02d";
CountDownTimer mCountDownTimer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_game);
text = (TextView) this.findViewById(R.id.textView3);
scorete = (TextView) findViewById(R.id.textView1);
scorete.setText(String.valueOf(sco));
load();
}
private void load() {
// TODO Auto-generated method stub
mCountDownTimer = new CountDownTimer(5000, 10) { // adjust the milli
// seconds here
public void onTick(long millisUntilFinished) {
text.setText(""
+ String.format(
"%02d:%03d",
TimeUnit.MILLISECONDS
.toSeconds(millisUntilFinished)
- TimeUnit.MINUTES
.toSeconds(TimeUnit.MILLISECONDS
.toMinutes(millisUntilFinished)),
TimeUnit.MILLISECONDS
.toMillis(millisUntilFinished)
- TimeUnit.SECONDS.toMillis(TimeUnit.MILLISECONDS
.toSeconds(millisUntilFinished))));
}
public void onFinish() {
text.setText("GameOver.");
}
};
mCountDownTimer.start();
}
@Override
public boolean onTouchEvent(MotionEvent touchevent) {
switch (touchevent.getAction()) {
case MotionEvent.ACTION_DOWN: {
x1 = touchevent.getX();
y1 = touchevent.getY();
break;
}
case MotionEvent.ACTION_UP: {
x2 = touchevent.getX();
y2 = touchevent.getY();
if (!animationRunning) {
// if left to right sweep event on screen
if (x1 < x2 && (x2 - x1) >= (y1 - y2) && (x2 - x1) >= (y2 - y1)) {
mCountDownTimer.cancel();
sco++;
scorete.setText(String.valueOf(sco));
load();
}
// if left to right sweep event on screen
else if (x1 > x2 && (x1 - x2) >= (y1 - y2) && (x1 - x2) >= (y2 - y1)) {
animationRunning = true;
mCountDownTimer.cancel();
text.setText("GameOver.");
}
}
}
}
}
}
Вы уверены, что логика в случае утверждения верны? Например, попробуйте напечатать что-то в этих заявлениях, чтобы узнать, достигнуты ли они даже –
Это отрывок из моей программы, я надеюсь, что не подвел итог этому неправильно. Для меня все отлично работает, у меня только проблемы с таймером. Он никогда не начинает отсчет заново с 5 секунд, когда пользователь оценивает, но он продолжает падать, как будто он всего лишь 5 секунд. –
Что происходит, когда вы удаляете 'load()' в том случае, когда пользователь оценивает? Таймер остановлен? –