2013-06-15 3 views
1

В настоящее время я работаю над Java-игрой, и у меня есть int, который представляет здоровье игрока, которое начинается на уровне 100, а здоровье уменьшается на 5 каждый раз, когда это пересекается с противником, однако он проверяет это 60 раз в секунду, поэтому он быстро уменьшается, так как для этой секунды игрок вступает в контакт с противником, поэтому уменьшается на 300 в секунду, чтобы он касался его. Мне интересно, можно ли остановить значение int от изменения примерно на 3-5 секунд? Я не знаю, если это возможно, я попытался это:Остановить int от увеличения или уменьшения в течение определенного времени

try { 
    Thread.sleep(4000); 
} catch(InterruptedException ie) { 
    Thread.currentThread().interrupt(); 
} 

И тогда INT может быть добавлен после этого, но это только останавливает всю программу в течение 4 секунд, и есть другие вещи, происходящие в то время.

+2

Я думаю, вы должны дать нам еще несколько контекстов. – Vegard

+0

напишите метод сеттера и управление там ............. – pinkpanther

+0

Вам нужно прекратить фокусироваться на «как остановить int от уменьшения», а вместо этого пересмотреть, как работает игровой цикл. Такие вещи необходимо объединить в «события», которые происходят только один раз. Когда игрок * первым * касается врага, происходит событие «контакта», и только до тех пор, пока игрок не перестанет касаться врага (а какое-то время проходит, называется «гистерезис»), может ли это событие повториться. Это сложно, но вам нужно идти по этому пути, иначе ваш код быстро станет гигантской дымящейся кучей. –

ответ

1

«Thread.sleep заставляет текущий поток приостановить выполнение» - Не используйте его, если вы не хотите останавливать весь поток.

Вы можете создать поток, который будет отвечать за изменение значения int, а затем для выполнения периодической задачи вы можете использовать ScheduledExecutorService#scheduleAtFixedRate. Например:

Runnable myRunnable = new Runnable() { 
    public void run() { 
     //... 
    } 
}; 

ScheduledExecutorService ex = Executors.newScheduledThreadPool(1); 
ex.scheduleAtFixedRate(myRunnable , INITIAL_DELAY, PERIOD, TIMEUNIT); 

Теперь вы можете решить, когда Thread будет запущен и как долго. Тем не менее, я рекомендую вам пересмотреть свой дизайн, прежде чем будет слишком поздно, и ваш код будет грязным.

Смежные вопросы