Как использовать дельта-миллисекунды, чтобы делать что-то каждые 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;

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

Другие вопросы по тегам