Как использовать дельта-миллисекунды, чтобы делать что-то каждые x миллисекунд?
Я использую систему синхронизации, где я получаю дельта (количество миллисекунд, прошедших каждый кадр, 60 кадров в секунду).
Прежде чем использовать тайминг, я посчитал кадры и сделал что-то вроде этого:
if(frames % 60 == 0) /*do something*/;
frames++;
Но я не могу использовать то же самое с дельтой:
if(milliseconds % 1000 == 0) /*do something*/;
milliseconds += delta;
Дельта изменяется каждый раз, и миллисекунды не будут кратны 1000 в секунду.
(Я использую Java, но это не совсем актуально.)
Редактировать:
If(миллисекунды - prev_milliseconds >= 1000) от Стаса Макутина работает по большей части. Но в части моего кода есть что-то вроде этого:
if(frames % 60 == 0){
...
}
if(frames % 60 == 30){
...
}
if(frames % 40 == 0){
...
}
Есть ли способ сделать это без использования prev_millisecond1, prev_millisecond2 и т. Д. (Т.е. несколько переменных prev_millisecond.)
1 ответ
Вероятно, что-то вроде этого будет работать:
prev_milliseconds = 0;
...
if (milliseconds - prev_milliseconds >= 1000)
{
/* do somthing */
prev_milliseconds = milliseconds;
}
milliseconds += delta;
Но если ваш код все еще срабатывает после каждого кадра, почему бы не продолжить подсчет кадров и использовать ваш старый код?