Время, как головная боль - его на самом деле нет (как и болевых рецепторов в мозгу), только ощущение.
Время - это наше ощущение причинно следственной связи.
Как в часах - одна шестерёнка двигает другую, другая - третью, третья - четвёртую. Если заставить шестерёнки двигаться в обратную сторону - часы будут двигаться назад. Ускорить их - они ускорятся. Замедлить - замедлится в часах и время.
Так как все шестерёнки взаимосвязаны - всё "время" можно провернуть, заставивив двигаться назад лишь одну.
То есть управление временем, это не некий мистический процесс из области хай-фая. Это вполне формализумая вещь.
Для эмуляции значит нужна система, работающая по линейным причинно-следственым связям и такая, в которой импульс не исчезает в никуда.
Возьмём, к примеру, классический арканоид.
Получилось бы его "развернуть"?
Предположим, что "основной шестерённкой" мы делаем шарик. Тогда:
1) Поведение доски мы делаем линейно зависимым от движений шарика (не имеет значение каким именно способом, к примеру - пишем бота, который бы пытался всегда подставлять доску под шарик).
Далее возникает проблема. Даже повернув "главную шестерёнку" назад (то есть, направив назад шарик) игра назад не пустится. Почему? Потому что не будут появляться назад кирпичи.
А появляться они не будут, потому что от удара шарика по кирпичам теряется импульс.
Добавим тогда "сохранение импульса":
2) Каждый кирпич разобьём на десять частиц. Если эти десять частиц оказываются в одной точке друг с другом и с шариком - они образовывают целый кирпич. После удара шарика по кирпичу, они разлетаются из одной точки в разные стороны и летают по уровню, отбиваясь от стен так же, как шарик, но не влияя ни на шарик, ни на доску ни на какие другие элементы игры.
Теперь другая проблема - полёт частиц от шарика не зависит. Т.е. под "главную шестерёнку" шарик больше не подходит. Значит нужно:
3) Сделать некий механизм, позволяющий ускорить, замедлить или повернуть назад движение всех свободно летающих по уровню элементов (а это шарик и частицы - других нет).
Конкретнее: Каждому "летающему" элементу нужно передать
импульс, который его бы и двигал.
Теперь этот этот импульс становится "временем". Повернув везде импульс (просто умножив скорость на -1), мы поворачиваем назад всю игру, которую теперь можно как угодно отматывать в любую сторону. Кирпичи будут разлетаться на частицы в обычном времени и собираться назад в обратном.
Это, конечно, максимально упрощённый пример.
Arcane s2e7-9
[Print]
nePu6kin