#java
Как создать таймер в методе boost, по истечению которого запустится метод stopboost? Я поискал на стаке и нашел таймер, только не знаю, как им пользоваться.Таймер. public void boost() { unboost = false; velocity.y = 200; } public void stopboost() { velocity.y = 0; }
Ответы
Ответ 1
Объясняю. Нам нужен класс Timer, который создан для того, чтобы ставить отложенные задачи. Метод public void schedule(TimerTask task, long delay) работает достаточно просто. Второй аргумент delay — задержка в миллисекундах. Первый аргумент — экземляр объекта TimerTask. Этот абстрактный класс предельно прост и требует реализовать всего один метод: public class MyTimerTask extends TimerTask { @Override public void run() {...} } Итак, нам нужен экземпляр этого класса. Как мы можем его получить? Проще всего объявить анонимный класс. TimerTask tt = new TimerTask() { @Override public void run() { // тут наш код } } Для того, чтобы использовать Timer, нужно создать его экземляр: Timer timer = new java.util.Timer(); Отдаем ему наш TimerTask: timer.schedule(tt, 1000); Если Timer нам больше не нужен, то мы можем и не присваивать его переменной, а выполнить метод на свежесозданном экземпляре и забыть о нем: new java.util.Timer().schedule(tt, 1000); Поскольку и TimerTask нам больше не нужен, то мы можем его создавать прямо в вызове метода: public void boost() { //какой-то код метода new java.util.Timer().schedule( new TimerTask() { public void run() { stopboost(); } }, 1000 ); //дальше код метода } public void stopboost() { velocity.y = 0; } И наконец, если метод stopboost существует только ради этого таймера, то и его мы тоже исключим (inline это называется) public void boost() { //какой-то код метода new java.util.Timer().schedule( new TimerTask() { public void run() { velocity.y = 0; } }, 1000 ); //дальше код метода }Ответ 2
а почему бы не сделать так public void boost() { unboost = false; velocity.y = 200; try { Thread.sleep(1000); // 1000 это 1 секунда stopboost(); } catch (Exception ex) { } } public void stopboost() { velocity.y = 0; }
Комментариев нет:
Отправить комментарий