Не работает таймер в конструкторе
Есть наследник от класса Man. Наследник должен быть неуязвим указанное время после создания. Жизнь он наследует у Man. Я инициализирую константу a и заменяю на health на нее. Делаю таймер. Не работает. Подскажите как исправить.
public class SuperMan extends Man {
int godMinutes;
final int a = 100;
double timer_s = 0;// начальное время для таймера
double timer_f = 0;// конечное время
double timer_d = godMinutes * 60000; // (количество миллисекунд) длительность таймера
// таймер с timer_d - время выполнения метода или команды
public void timer_play() {
if (timer_s == 0) { //если таймер не запущен
timer_s = System.currentTimeMillis();// получаем текущее время милсек
timer_f = timer_s + timer_d; // конечное время
this.health = a;
}
if (timer_f <= System.currentTimeMillis()) { //если время вышло
//команда или метод(если есть) по финишу
this.health = INITIAL_HEALTH;
}
}
public SuperMan (int godMinutes) {
this.godMinutes = godMinutes;
timer_play();
}
}
или типа такого делать
public class GodTimeHero extends Hero {
int godMinutes;
final int a = 100;
public GodTimeHero(int godMinutes) {
this.godMinutes = godMinutes;
double timer_s = System.currentTimeMillis();
double timer_d = this.godMinutes * 60000;
double timer_f = timer_s + timer_d;
while (timer_s < timer_f) {
this.health=1000000000;
}
}
}
Ответы (2 шт):
Автор решения: Serhii Dikobrazko
→ Ссылка
while (timer_s < timer_f) {
this.health=1000000000;
}
Это точно наботать не будет
Если вы хотите сдлеать неуязвимым персонажа, до тех пора не пройдет какое-то время, так сделайте банальную проверку времени при нанесении урона
private undeadUntil = System.currentTimeMillis() + 60000;
public damagePerson(int damage){
...
if(System.currentTimeMillis() < undeadUntil){
return;
}
this.health =- damage;
}
Автор решения: Ramiz
→ Ссылка
несмотря на то что решение с таймером конкретной задачи не является целесообразным, вопрос был все же про таймер (возможно это решение будет полезно в других задачах):
import java.util.Timer;
import java.util.TimerTask;
//...
class Man {
static final int INITIAL_HEALTH = 10;
volatile int health = INITIAL_HEALTH;
// ...
}
class SuperMan extends Man {
int godMinutes;
final int a = 100;
final Timer timer = new Timer(true);
public SuperMan(int godMinutes) {
this.godMinutes = godMinutes;
timer_play();
}
void resetHealth() {
health = INITIAL_HEALTH;
}
private void timer_play() {
health = a;
timer.schedule(new TimerTask() {
@Override
public void run() {
SuperMan.this.resetHealth();
}
}, godMinutes * 60_000L);
}
}