petushok55
@petushok55
Обучаюсь на практике.

Как реализовать систему перемотки времени назад, как в принц персии например?

В одной из частей есть кинжал времени, вот он геймплей назад отматывает.
Я вот как разработчик не могу понять каким способ достичь этого.
У меня есть идеи конечно, но мне кажется, это не лучший вариант..
Например:
Вести лог всех объектов на сцене (спавн, уничтожение, изменение координат и других свойств объекта и время этих манипуляций) и когда это нужно, воспроизводить всё в обратном порядке по времени
  • Вопрос задан
  • 323 просмотра
Пригласить эксперта
Ответы на вопрос 4
NeiroNx
@NeiroNx
Программист
Для этого надо хранить рестроспективу сцены, координаты которые менялись с метками времени. Это меньше чем хранить видео. Когда надо отмотать - просто выставляете их объектам в обратном порядке.
Ответ написан
Комментировать
jamakasi666
@jamakasi666
Просто IT'шник.
Представьте что вам нужно вести запись демки в игре.
Пишете координаты, что где заспавнилось, что задеспавнилось, куда двигалось и вращалось. Делаете в записи обратный ход времени, в простейшем случаее инвертируете логику спавна\деспавна.
Ответ написан
Комментировать
@CBET_TbMbI
Вести лог всех объектов на сцене (спавн, уничтожение, изменение координат и других свойств объекта и время этих манипуляций) и когда это нужно, воспроизводить всё в обратном порядке по времени

А как без этого? Вам нужно прошлое, значит нужна информация об этом прошлом. Значит её надо записывать и хранить. Вопрос лишь в деталях: как часто делать записи, как долго хранить, что именно туда включать и что можно упустить, хранить логи отдельных сущностей или переодически делать "снимки" всего окружения игрока и т.д. Это уже вам решать. Плюс надо подумать, нужна ли обратная анимация всех процессов, или достаточно будет просмотра стоп-кадров.
Ответ написан
Комментировать
@RR_Zz
Про лог ответили выше.
А если говорить про алгоритмы. То тут идеально подойдет кольцевой буфер. "Кинжал" же может отматывать время только на отделенное количество шагов/секунд назад. Вот такого размера кольцевой буфер и инициализируйте. А все что раньше само будет очищаться.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы