Пытаюсь понять, как сделать игровой цикл в стретегии с огромным количеством юнитов на карте (как минимум 1к не должно тормозить на телефоне, а лучше 8к и больше). Есть следующие ограничения:
- течение игрового времени не зависит от fps и прочих сюрпризов типа сборщика мусора на 30мс
- повторяемость. В идеале - разбить игру на "тики", и получить возможность при тех же входных данных получить ровно те же результаты.
- длинный тик: есть опасения, что каждый кадр или чаще обновлять состояние каждого юнита не получится - их много, да и аккумулятор экономить надо.
В итоге у меня сформировалась следующая идея:
мир обновляется около пяти раз в секунду, следующее состояние мира детерминировано вычисляется на основе предыдущего состояния и пользовательских действий:
state(x+1) = f(state(x), input)
Поскольку время вычисления следующего состояния может оказаться больше, чем время обновления экрана, я разбиваю карту на куски и первым делом рассчитываю тот кусок, который видит пользователь, и на основе старой и новой позиции юнитов p0 и p1 интерполирую промежуточную как p0 + (p1-p0)*t
Кто пробовал писать rts, поделитесь опытом: как бы вы это сделали?
Какая задержка при отдаче команд юнитам заметна? Тут не старкрафт, несколько сотен раз в минуту в экран тыкать осмысленно вряд ли можно.