Пишу свой первый игровой 2d движок. Встал перед дилеммой: имеет ли хоть какой то смысл вести два таймера - отдельно для раундов исполнения игровой логики и отдельно для отрисовки кадров? В целью например иметь два разных лимита: скажем, не больше 60 кадров в секунду и не больше 100 раундов просчёта игровой логики в секунду.
Или лучше вести один и исходя из лимита кадров в секунду (допустим даже если он 999) определить интервал и по нему производить просчёт логики, а потом отдавать на отрисовку?
Saboteur
@saboteur_kiev Куратор тега Разработка игр
А может лучше сделать два потока - в одном обрабатывается игровая логика, в другом отрисовываются кадры - на разных компах отрисовка кадров может идти с разной скоростью. А игровая логика должна быть привязана к реальным часам, а не скорости компа.
Saboteur, думаю над этим вариантом, но мне на потоки ещё нужно завязать обработку фоновых задач, плюс ко всему этому прикрутить событийность, а плодить потоки сотнями не очень хочется.
Не нужно таймер фпс, нужно смотреть, сколько времени прошло с прошлого кадра. Потому что фпс может быть и сильно ниже заданных 60 (даже в 2Д можно так нагрузить сотнями тысяч юнитов, что под ноль фпс будет).
Неужели вы думаете что для обработки циклов движка я буду использовать таймауты? Лимиты мне нужны как раз чтобы вычислить минимальный временной промежуток между запусками циклов.
Qualiant, Суммируйте интервал между кадрами, если сумма больше или равна заданному интервалу, то пересчитывайте логику. Если активных объектов будет очень много, то удобнее обновлять состояние отдельных объектов с большим временным интервалом. Напрмиер, траектория движения юнита будет обновляться раз в 5 секунд, но моменты выполения этого обновления для разных юнитов будут разными. Т.е. для каждого юнита будет считаться время с последнего обновления.
Видимо, я слишком буквально понял слово "таймер". Именно системный таймер, генерирующий события через заданные интервалы - не нужен. А переменная, в которой суммируется или всё время игры или какие интервалы - очень нужная и их может быть столько, сколько удобно для реализации игровой логики. Скорее всего, такой же таймер будет в каждом активном объекте и в статичных объектах, у которых есть анимация.
> Напрмиер, траектория движения юнита будет обновляться раз в 5 секунд
Не, это уже относится к игровой логике и совершенно не относится к текущей проблеме. Я делаю общее решение и на данный момент я на этапе фундаментальных проблем.