Кофе
emergency
дневник заведен 08-07-2007
закладки:
цитатник:
дневник:
местожительство:
Москва, Россия
10-05-2009 23:08 Время вспять
Время, как головная боль - его на самом деле нет (как и болевых рецепторов в мозгу), только ощущение.

Время - это наше ощущение причинно следственной связи.
Как в часах - одна шестерёнка двигает другую, другая - третью, третья - четвёртую. Если заставить шестерёнки двигаться в обратную сторону - часы будут двигаться назад. Ускорить их - они ускорятся. Замедлить - замедлится в часах и время.

Так как все шестерёнки взаимосвязаны - всё "время" можно провернуть, заставивив двигаться назад лишь одну.

То есть управление временем, это не некий мистический процесс из области хай-фая. Это вполне формализумая вещь.

Для эмуляции значит нужна система, работающая по линейным причинно-следственым связям и такая, в которой импульс не исчезает в никуда.
Возьмём, к примеру, классический арканоид. Получилось бы его "развернуть"?

Предположим, что "основной шестерённкой" мы делаем шарик. Тогда:
1) Поведение доски мы делаем линейно зависимым от движений шарика (не имеет значение каким именно способом, к примеру - пишем бота, который бы пытался всегда подставлять доску под шарик).

Далее возникает проблема. Даже повернув "главную шестерёнку" назад (то есть, направив назад шарик) игра назад не пустится. Почему? Потому что не будут появляться назад кирпичи.
А появляться они не будут, потому что от удара шарика по кирпичам теряется импульс.

Добавим тогда "сохранение импульса":
2) Каждый кирпич разобьём на десять частиц. Если эти десять частиц оказываются в одной точке друг с другом и с шариком - они образовывают целый кирпич. После удара шарика по кирпичу, они разлетаются из одной точки в разные стороны и летают по уровню, отбиваясь от стен так же, как шарик, но не влияя ни на шарик, ни на доску ни на какие другие элементы игры.

Теперь другая проблема - полёт частиц от шарика не зависит. Т.е. под "главную шестерёнку" шарик больше не подходит. Значит нужно:

3) Сделать некий механизм, позволяющий ускорить, замедлить или повернуть назад движение всех свободно летающих по уровню элементов (а это шарик и частицы - других нет).
Конкретнее: Каждому "летающему" элементу нужно передать импульс, который его бы и двигал.

Теперь этот этот импульс становится "временем". Повернув везде импульс (просто умножив скорость на -1), мы поворачиваем назад всю игру, которую теперь можно как угодно отматывать в любую сторону. Кирпичи будут разлетаться на частицы в обычном времени и собираться назад в обратном.

Это, конечно, максимально упрощённый пример.
Комментарии:
Камрад
> Сила удара (В) ушла в А, так что к примеру, если ты отмотаешь время назад, то А в нужный момент соберёт силу чтобы "пнуть" то, что на нём лежит. В чем здесь скрытость таймера?

Таймер тут находится не в кубиках а в полу. С первого взгляда кажется, что таймера нет.

> И какие именно "неправильности" может вызвать шарик, вытаскивающий кубики при обратной отмотке?

А подумай. Если не догадаешься - я обьясню.
Камрад
> И все же - а в твоем плане где главная шестеренка?

Переменная скорости.
К ней добавляется коэффициент. Пока этот коэфициент равен одному - игра идёт обычно.
Когда минус одному - игра идёт в обратном времени.
Когда двум - с двойной сокростью вперёд.
Когда минус двум - с двойной скоростью назад.

Этот коэффициент и есть главная шестерёнка.

Ты наверное просто не понимаешь, потому что с программированием не знаком.
13-05-2009 04:28
Darker than VITAL
> Ты наверное просто не понимаешь, потому что с программированием не знаком.

Все-таки знаком. Нас знакомили. Вот только я еще и с математикой знаком.

> Этот коэффициент и есть главная шестерёнка.

Этот коэффициент является шестеренкой более высокого порядка абстракции. Потому что он есть и в шестеренках тоже. И влияет, фактически, на поведение их всех сразу, ни разу не являясь частью системы, а будучи самым что ни на есть ее свойством. Или характеристикой, что то же.

> Таймер тут находится не в кубиках а в полу. С первого взгляда кажется, что таймера нет.

Я просто этот таймер представлял, как глобальную последовательность событий. Имеет ли смысл помещать его в пол или в кубики? И даже, если это будут раздельные таймеры - все равно их видно.

> А подумай.

Думаю.
13-05-2009 04:53
Darker than VITAL
Если использовать модель, предложенную мной:
1. Запоминать ничего не надо, и таймеров не надо также. Все время четко эмулируется шариком, достаточно по нажатию кнопки "Развернуть" разворачивать только его. Полный аналог шестеренок.
2. Ракетку можно оставить интерактивным элементом - нам ведь хочется играть и при обратном ходе времени - а можно и написать бота, чтобы была полная причинно-следственная связь. Хотя по мне это будет не полнота, а излишества.
3. Если сильно охота управлять полем - на здоровье. Импульсов, возникающих в непонятном месте, здесь не будет, просто потому что они содержатся неявно в кубиках, а не в полу.
4. Однако эта система, разумеется, не обладает всем этим потенциалом - типа, летит шарик, а тут его ни с того ни с сего РРАЗ! и как толкнет.
5. Но, обращу твое внимание, что сам этот потенциал мало того, что напоминает набор багов, так и по сути своей неразвлекателен. Если только не отмечать места в полу, которые скоро отдадут импульс, цветом и показывать таймером, когда.
6. Что начисто обнажает этот таймер, где бы он ни лежал.
7. Остается еще вопрос (в моей модели), как быть, если при обратном ходе шарик попадет по уже выдвинутому кубику. Во-первых, если кубики по полю не перемещаются, такая ситуация исключена. Во-вторых, если перемещаются, то пусть, например, ничего не происходит. Просто шарик отскакивает и все. Вот в оригинальном арканоиде же кубики исчезали в никуда - никто не возмущался.

Так и не додумался. Так что, видимо, придется объяснить. )
Камрад
Ну, предполоим, шарик при промотке в одну сторону шарик вбивает кубики. При промотке в другую - возвращает их назад.

Есть шарик. Есть кубик.

Играешь. Сбил кубик. Играешь длаьше. Шарик ещё раз десять проехал по сбитому кубику. Запускаешь промотку назад. Первый же проезд шарика по сбитому кубику - возвращает того назад (а должен - не первый, а десятый проезд). Бага то есть.

Лечится это выставлением дополнительного таймера для каждого кубика.
Но тогда система ничем не отличается от той, что я описывал в самом начале обсуждения - где просто ставил таймеры на кубики.

Ну и плюс кубики при обратной промотке будут возникать сами собой без участия шарика, что не красиво.
13-05-2009 17:40
Darker than VITAL
Точно, блин.
13-05-2009 17:45
Darker than VITAL
Вот же гадство - без таймера не обойдешься
Камрад
Ну. если очень хочется, то можно обойтись и без явных таймеров. Вариантов можно придумать очень много - удовлетворяющих практически любым мыслимым условиям.

Но самым красивым мне кажется вариант с таймерами запуска сил трения в полу.
Закрыть