Найти в Дзене
Making games is easy!

Реализация обратного отсчета времени в игре. Программирование под Android на Java.

Довольно часто в играх надо выводить текущее время, или обратный отсчет.

В данном уроке приведу пример обратного отсчета стандартного табло времени.

Для начала в макете пропишем:

<TextView
android:id="@+id/taimer"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="x"
android:textSize="18sp" />

Здесь мы будем выводить время

Далее в коде Java файла.

private int seconds = 0; // Секунды таймера
private int vremia_istecllo_miss_1 = 300; // Время отведенное на игру
private boolean running = true; // Секунды идут

TextView taimer;

private Handler handler = new Handler();
private Runnable runnable = new Runnable(){
@Override
public void run() { // Код таймера

/*
int hours = seconds / 3600;
int minutes = (seconds % 3600) / 60;
int secs = seconds % 60;
int sec = 20 - secs;

//*/

taimer = (TextView) findViewById(R.id.taimer);


int minute_s_1 = (((vremia_istecllo_miss_1 - seconds) % 3600) / 60);
int sec_s_1 = ((vremia_istecllo_miss_1 - seconds) % 60);

// Ниже строка форматного вывода таймера (выводим минуты и секунды)

// Если нужны часы добавьте их также

//(подсказка закомментированный код сверху)

        String time_v_1 = String.
format("%02d:%02d", minute_s_1, sec_s_1);

if((vremia_istecllo_miss_1 - seconds) >0) {

taimer.setText(time_v_1); // Выводим данные (время)

        }
else {// Время отведенное на игру истекло

// seconds = 0; // Зацикливаем

taimer.setText(""+0); // Я немного упростил (вывел просто ноль)

          // running = false; // Можно остановить секунды

        }

if (running) { // Таймер запущен
seconds++; // Секунды бегут
           }
handler.postDelayed(this, 1000); // Скорость таймера
}
};

// И не забываем прописать

@Override
protected void onPause()

{

super.onPause();
/* Вы забыли написать строчку ниже и в вашем приложении появилась утечка памяти */
handler.removeCallbacks(runnable);
}

@Override
protected void onResume()
{
super.onResume();
handler.post(runnable); // Возобновление работы таймера
}

// Можно также прописать это, но в принципе это не обязательно

@Override
public void onDestroy() {
super.onDestroy();
//handler.removeCallbacksAndMessages(null);
if(handler != null){
handler.removeCallbacks(runnable);
}

    }

Вроде я ничего не забыл

Подписывайтесь на канал, не пропустите новые публикации. Ставьте палец вверх. :-)