Как я могу создать таймер обратного отсчета в приложении, которое сохраняется, если приложение закрыто? - PullRequest
0 голосов
/ 24 мая 2019

Я создаю игру, в которой «Энергетические очки» используются в качестве валюты для выполнения определенных действий в игре (для выполнения определенных задач необходимо потратить энергетические очки). Когда игрок набирает ноль очков энергии или ему не хватает энергии для выполнения определенной задачи, я должен подождать несколько часов, чтобы продолжить, или посмотреть видео, чтобы получить несколько быстрых очков.

Это должно иметь следующие функции:

Я создал PopupDialog, используя следующий код. Функция showPopupDialog() вызывается естественным образом, если условие energyCost < energyPoints.

 public void showPopupDialog(){
        AlertDialog.Builder dialog = new AlertDialog.Builder(this);
        dialog.setTitle("Not Enough Energy!");
        dialog.setMessage("You don't have enough Energy Points to do this! 
 Would you like to watch a video to get more Energy?");
        ((AlertDialog.Builder) dialog).setPositiveButton("Watch", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                //ad plays here  
                energyPoints = energyPoints + 500;
                ep.setText(energyPoints+"");
            }
        });
        ((AlertDialog.Builder) dialog).setNegativeButton("Wait", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                new CountDownTimer(30000, 1000) {

                    public void onTick(long millisUntilFinished) {
                    }

                    public void onFinish() {
                        energyPoints = energyPoints+500;
                        ep.setText(energyPoints+"");
                    }
                }.start();
            }
        });
        dialog.show();

    }

Хотелось бы узнать, как сделать следующие модификации:

  • Таймер обратного отсчета должен сохраняться, даже если приложение закрыто или я ухожу от действия. Так что, когда я вернусь через 4 часа, некоторые энергетические точки будут восстановлены.

  • Вы не можете нажать на «Ожидание» (таким образом, вызывая другой таймер), пока работает текущий таймер. Вам нужно подождать отведенное время, прежде чем вы сможете щелкнуть его снова.

  • Игра отправляет уведомление по окончании ожидания, чтобы игрок знал, что продолжить.

Ответы [ 2 ]

0 голосов
/ 24 мая 2019

Не зная большого количества кода, я предложу концепцию.

Используйте сам таймер для презентационных целей, но для реальной рабочей логики создайте временную метку «последний добавленный пункт» или что-то в этом роде.

Это позволит вам каждый раз, когда вам нужно использовать, показывать или получать фактические баллы, получать последнюю отметку времени, сравнивать ее с текущим временем и действовать соответственно. Например, я проверяю последний, и при сравнении разница составляет 3 часа. Если каждые десять минут у меня будет 5 баллов, я буду делать 3 * 60/10 * 5 = общее количество заработанных баллов.

Это позволит просто сосредоточиться на том, что время прошло, а не на таймере.

Затем, когда приложение закрывается, вы сохраняете последнюю временную метку, а при повторном открытии сравниваете ее снова и действуете соответствующим образом.

0 голосов
/ 24 мая 2019

Чтобы быть точным, проще всего было бы взаимодействовать между сервером и клиентом, чтобы вы не могли просто манипулировать временем, установив его на 4 часа позже.

Если манипулирование вам подходит - просто читайте / пишитепоследнее время, установленное во внешнем файле.

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