Получение секунд от хронометра до целого числа

Я создаю игру, которая будет повышать свой уровень каждые 10 секунд, пользователи будут видеть время (используя хронометр) и уровень, на котором они сейчас находятся. Я пытаюсь создать целое число, которое будет увеличиваться каждые 10 секунд, как показано на хронометре.

Я не нашел здесь руководства, отвечающего моим потребностям. Я пытался догадаться, что хронометр отсчитывает миллисекунды, но это было не так.

Внутри моего класса:

private Chronometer chronometer;

Внутри моего onCreate (используется XML):

chronometer=findViewById(R.id.timer);

Попытка преобразовать хронометр в секунды (только первая попытка):

        int timeChecker=(int) (SystemClock.elapsedRealtime() - chronometer.getBase());
        if (timeChecker==10){
            lvl++;
            lvlcount.setText(lvl+"");
        }

Я хотел повышать уровень каждые 10 секунд, а затем менять TextView на предыдущий уровень.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
188
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Во-первых, elapsedRealTime() и chronometer.getBase() выражены в миллисекундах, поэтому дельта также выражается в миллисекундах:

long timeDeltaFromStartInMs = (SystemClock.elapsedRealtime() - chronometer.getBase());

Далее, предполагая, что хронометр никогда не сбрасывается для этого обсуждения, тогда количество пройденных уровней равно (целочисленное деление усекается):

int numLevelsElapsed = (int) (timeDeltaFromStartInMs / 10000);

Предполагая, что начальный уровень начинается с 0, это просто:

lvlcount.setText(Integer.toString(numLevelsElapsed));

Если уровень имеет начальное ненулевое значение (из какой-то предыдущей игры):

lvlcount.setText(Integer.toString(initialLevelCnt+numLevelsElapsed));

Может быть несколько других нюансов в вашей проблеме - если это так, не стесняйтесь комментировать.

Другие вопросы по теме