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

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

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

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

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

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

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

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

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

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

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

Это, конечно, максимально упрощённый пример.
Комментарии:
Осциллятор
Почему мы разбиваем кирпич на 10 частиц, а не на две, например? Чтобы гарантировать, что эти частицы через некоторое время не "соберутся" в другой точке с шариком, что при перемотке обратно создаст "неправильный" кирпич? А можно ли гарантировать, что этого не произойдет с 10 частицами?

Мне почему-то кажется, что при разбиении на любое количество частиц вероятность их сбора в будущем в другой точке будет ненулевой.
Камрад
Можно вообще на частицы не разбивать - просто выставить таймер на пустую точку, отсчитывайющий время после разбивания и потом пускать таймер назад.

С частицами нагляднее.

А, собственно, зачем мне гарантировать нулевую вероятность неправильного срабатывания?

Речь идёт о наглядной эмуляции простой системы.
Упор на словах "наглядной" и "эмуляции".
Камрад
Ну и ещё - от частиц мне будет легко пойти дальше, если я захочу продолжить размышления, расширив систему.
Осциллятор
А зачем вообще эта возня с частицами, когда просто можно запоминать время уничтожения кирпича?
Камрад
Дубль два: Для наглядности.
11-05-2009 03:16
Darker than VITAL
А в таком эксперименте "игра" должна оставаться игрой? То есть сохранять элемент контроля и развлекательности? При положительном ответе такие эксперименты вносят неплохой вклад в развитие жанра (я сейчас про Braid).
11-05-2009 03:21
Darker than VITAL
К чему я это спросил то - если мы можем пустить время в обратную сторону, то цель игры (в данном случае, например, арканоида) становится бессмысленной. Ну либо бессмысленной становится эта фича - про изменение причинно-следственных связей. Я понимаю, что изначально такой цели не ставилось, но ведь куда интересней, когда мысленный экперимент имеет реальное приложение. Я бы, например, с удовольствием своего кота назвал Шрёдингером... ))
Камрад
Я сейчас не об игре писал, а об эмуляции поворота времени.

Braid - совсем другое дело.
Там "отмотка плёнки", а не поворот времени назад.

Поэтому в Braid, к примеру, предметы часто отскакивают от воздуха при "обратной отмотке" и это используется в геймплее.

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

Возникает вопрос - возрождать ли уничтоженные кубики если шарика рядом с ними не пролетало?

Это я к тому, что во взаимосвязанной системе вообще отсутствует понятие "вариантов". То есть ты можешь представить себе часы, в которых одна из шестерёнок может двигаться с той скоростью, которую выберешь?
Там всё взаимосвязано, начинает по другому двигаться одна - синхронно ей двигаются и остальные.
11-05-2009 03:29
Darker than VITAL
А как же введение элементов, "не подвластных ходу времени" (не знаю, как лучше их назвать)? Не превращают они простую отмотку в нечто большее?
11-05-2009 03:30
Darker than VITAL
Вот именно!! Ответ на вопрос - положительный. А при отмотке - такого просто быть не может.
11-05-2009 03:33
Darker than VITAL
Так и в Braid - может получиться так, что при развороте импульса, к примеру, ключ, который до этого валялся в яме с шипами, окажется в руках персонажа, который до этого в этой яме "умер". А персонаж будет жив и здоров. Это уже выходит за пределы отмотки.
Камрад
На самом деле - можно сделать систему (даже в рамках того же арканоида) в которой будет праивльно работать разлёт частиц при отмотке вперёд или назад.
11-05-2009 03:36
Darker than VITAL
( Блин, не так. Понятно, что доска не может измениться сама по себе. Но она ведь меняется от действий шарика, или что мы там выбрали.
11-05-2009 03:37
Darker than VITAL
Прошу прощения, что пишу невпопад. ) На такую систему было бы любопытно взглянуть.
Камрад
То есть предположим что детали на уровне нужно не разбивать, а выталкивать шариком за пределы поля.

Тогда нужно добавить только уход импульсов в "пол" и возникновение их в нужный момент - и всё будет работать очень хорошо и красиво.
Камрад
Ну то есть. Вот представь - есть камень (A). Кинул ты на этот камень другой (B). Они остались лежать рядом.
С первого взгляда - кажется "с чего бы это при обратной отмотке камню (В) со улетать от (А)? это же противоречит законам физики"

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

Останется только сэмулировать это в арканоиде - и пол сам будет "отпинывать" кубики, возвращая их на поле при обратной отмотке.
11-05-2009 03:42
Darker than VITAL
А управляем мы чем? Шариком? Или просто "направлением времени"?
Камрад
Управляешь доской.
Камрад
То есть, при такой механике - представим ты выкинул с поля некий кубик. Он отлетел на 5 метров и остановился.

Ты поиграл немного, а потом решил поиграть в "обратном времени".
Вот ты играешь - и в нужный момент пол "пинает" кубик назад. Оданко, так как доской ты двигаешь по другому, то кубик, не встречая перед собой шарика - пролетает не пять метров, а уже десять (т.е. пять метров его "разгоняет" пол, а следующие пять - он останавливается, так как не встретил шарика)
Закрыть